COM_INTERFACE_ENTRY に関するマクロ
この種のマクロは、オブジェクトのインターフェイスをその COM マップに入力して、QueryInterface がオブジェクトのインターフェイスにアクセスできるようにします。マップでは、Orders インターフェイスである COM エントリの順序は QueryInterface中に一致する IID がチェックされます。
QueryInterface してインターフェイスを公開する各オブジェクトは、マップする独自の COM が必要です。COM は、マクロ BEGIN_COM_MAPの開始をマップします。インターフェイスのエントリは COM_INTERFACE_ENTRY マクロの一つ以上に追加され、マップは END_COM_MAP のマクロについて説明します。例:
BEGIN_COM_MAP(CMyObject)
COM_INTERFACE_ENTRY(IMyObject)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
COM マップの最初のエントリが COM マップを含むオブジェクトのインターフェイスであることに注意してください。したがって、COM に別のオブジェクトのマップを COM_INTERFACE_ENTRY_CHAIN(COtherObject) がオブジェクトの COM マップに表示される位置で検索します COM_INTERFACE_ENTRY_CHAINマップのエントリを使用して COM を起動できません。別のオブジェクトの COM マップを最初に検索する場合は IUnknown のインターフェイスのエントリは、マップする他のオブジェクトの COM をチェーンするには、COM マップに追加する。例:
BEGIN_COM_MAP(CThisObject)
COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()
注意 |
---|
バージョン 3.0 の時点で、ATL は、特定のクラスの対応する IID を取得するには、コンパイラのキーワード __uuidof( class ) を使用します。バージョン 3.0 で有効な COM_INTERFACE_ENTRY マクロの変更でそのインターフェイスの IID 一致を定義するライブラリでリンク代わりに、使用するインターフェイスのヘッダーを単に含まれています。この変更は、ヘッダーが MIDL の古いバージョンで前に生成するか、または適切に取得され、コード マークされていない限り問題が発生する可能性があります。ヘッダーのインターフェイスの宣言が __declspec( に関連付けられたuuid )でマークされていない場合、そのインターフェイスに __uuidof のキーワードを使用しようとすると、失敗します。古いために元に戻すことができます (この新しい動作を持つ任意の問題に関する作業対象のビルドの設定の _ATL_NO_UUIDOF の定義によって ATL 2.x) COM_INTERFACE_ENTRY マクロ。 |
COM は、エントリ マクロをマップします
次に、使用できるエントリ マクロです:
要件
ヘッダー: atlcom.h