Как мне установить интерфейс на CComPtr в суперклассе? - PullRequest
0 голосов
/ 20 апреля 2011

Я хочу попробовать изменить мой код, чтобы использовать суперкласс для обработки создания CComPtr, но я не уверен, как передать класс в CComPtr для создания, то есть часть в

void CSuperClass::CreateSmartPointer(CString class, Interface interface)
{
   CLSID clsid;
   hr = CLSIDFromProgID(class, &clsid);
   CComPtr<interface> spInterface;
   hr = spInterface.CoCreateInstance(clsid, 0, CLSCTX_ALL);
}


void CSubClass::Init()
{

    CreateSmartPointer("MYServer.MyClass", xxx);
}

void CSubClass2::Init()
{

    CreateSmartPointer("MYServer2.MyClass2", xxx);
}

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

В зависимости от того, чего вы хотите достичь, шаблоны могут выполнять эту работу:

template<class Interface> class CSuperClass { 
    // ...
    void CreateSmartPointer(CString class) {
        // ...
        CComPtr<Interface> spInterface;
        // ....
0 голосов
/ 20 апреля 2011

Я думаю, вы можете использовать функцию IIDFromString, чтобы получить идентификатор интерфейса, а затем сделать QueryInterface для этого. Создайте COM-объект на IUnknown, а затем выполните QueryInterface на только что разрешенном IID.

...