2011-01-16 14 views
1

ATLプロジェクトからCOMインターフェイスを呼び出すにはどうすればよいですか?ATLプロジェクトからカスタムCOMインターフェイスを呼び出す

私はhttp://www.codeproject.com/KB/COM/comintro.aspxの例に従っていましたが、wininet.hで定義されているIActiveDesktopクラスを使用しています。インターフェイス定義がないカスタムコンポーネントを呼び出すにはどうすればよいですか。どのように私はそれを生成するのですか?

MFCプロジェクトでは、TypeLibからMFCクラスを生成できます。しかし、ATLプロジェクトのTypeLibからヘッダーを生成するにはどうすればよいですか?

答えて

1

サードパーティのCOMコンポーネントを呼び出す場合は、そのコンポーネントのインターフェイス定義ファイル(.idl)を使用する必要はありません。 CoCreateInstanceやQueryInterfaceなど、任意のCOMオブジェクトで行う一般的な処理をカプセル化するCComPtr ATLクラスを使用します。 CComPtrをActiveXコントロールで使用することを特に容易にするIDispatchのテンプレート特殊化もあります。

CComPtr p; 
static CLSID id = { 0xcf9904f7, 0x8623, 0x465b, { 0xa0, 0x5e, 0x9d, 0x5a, 0xa, 0x2c, 0x1a, 0xe7 } }; 
p.CoCreateInstance(id); 
+0

IDispatchを経由するのではなく、インターフェイス経由で関数を呼び出すことは有益です。 – YeenFei

+0

小さな例を教えてください。 QueryInterfaceでは、私はGUIDとインターフェイスの定義が必要です。私のサードパーティのDLLのInterfacheの定義はどこで取得できますか? – Jan

+0

@ Jan:インターフェイス定義自体は必要ありません。インターフェイスのドキュメントが必要なだけで、インターフェイス上で使用できるメソッドがわかります。コンポーネントがマシンレジストリに正しく登録されていることを確認してください。 – ThomasMcLeod

関連する問題