0

スーパークラスを使用して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);
}
4

2 に答える 2

0

IIDFromString関数を使用してインターフェイスIDを取得し、それを実行できると思いますQueryInterface。でCOMオブジェクトを作成してから、新しく解決IUnknownしたでを実行します。QueryInterfaceIID

于 2011-04-20T11:05:00.590 に答える
0

あなたが達成したいことに応じて、テンプレートは仕事をすることができます:

template<class Interface> class CSuperClass { 
    // ...
    void CreateSmartPointer(CString class) {
        // ...
        CComPtr<Interface> spInterface;
        // ....
于 2011-04-20T11:56:37.763 に答える