Приведение пойнтера на интерфейс к пойнтеру на объект класса
От: -=chp=- Россия http://chpfilms.boom.ru
Дата: 12.11.04 18:47
Оценка:
Есть класс:

class ATL_NO_VTABLE CSignal : //!< Signal object
public IDispatchImpl<ISignal, &IID_ISignal, &LIBID_UnitVwLib>,
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSignal>
{
...
}


Создаю объект класса.

ISignal *p = NULL;
if (CSignal::CreateInstance(&p) == S_OK && p != NULL)
{

Хочу получить по пойнтеру на интерфейс пойнтер на объект класса. Дабы использовать методы которые не торчат через интерфейс. Работает. Но в случае если я определяю _ATL_DEBUG_INTERFACES все перестает работать потому что приведение работает некорректно (приводится не к тому чему ожидалось). Чувствую что я серьезно напортачил с архитектурой .

m_pSignal = (CSignal *)p;
...
}

Собственно чего хочется — есть интерфейс который видно через IDispatch. И есть некий скрытый интерфейс, который никому не видно кроме собственно этого компонента. Как это реализуется идеологически правильно?

Заодно можно ли сделать идеологически правильной мою схему с приведениями типов или в морг?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.