ИНФО: Как получить Cx из Ix*
От: Vi2 Удмуртия http://www.adem.ru
Дата: 17.06.02 07:28
Оценка: 31 (5)
#Имя: FAQ.com.cxfromix
Где-то когда-то встречался вопрос, как из указателя на интерфейс получить указатель на класс, которым этот указатель имплементирован. Сейчас не могу найти где это было, а материал попался интересный. Может кому-то в ряде случаев и будет полезным.

HOWTO: Get a C++ Class from an Interface Pointer in ATL
Q234785

Кратко оттуда:
...Один из самых легких и самых безопасных методов выполнить это "преобразование" — использование ATL COM карты и QueryInterface. Помещая указатель на C++ класс в COM карту и используя CLSID в качестве идентификации интерфейса, Вы можете благополучно получить указатель на объект, вызывая QueryInterface метод.
BEGIN_COM_MAP(CMyAtlObj)
   // ... other COM_INTERFACE_ENTRY macros
   COM_INTERFACE_ENTRY_IID(CLSID_MyAtlObj, CMyAtlObj)
END_COM_MAP()

И использование
    CMyAtlObj* pObj;
...
    if( SUCCEEDED(pUnk->QueryInterface(CLSID_MyAtlObj, (void **)&pObj)) )
    {
        hReturn = pObj->Method1(); //Method1 is a public member function of CMyAtlObj class.
        pObj->Release(); //Needed because we called QueryInterface.
    }
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.