COM_INTERFACE_ENTRY マクロ

QueryInterfaceがアクセスすることができますので、これらのマクロ オブジェクトのインターフェイスの COM マップに入力します。COM マップ内のエントリの順序は順序インターフェイス、一致するIIDQueryInterface中にチェックされますです。

そのインターフェイスでQueryInterfaceを公開したい各オブジェクトは、独自の COM マップが必要です。COM マップは、 BEGIN_COM_MAPマクロを起動します。COM_INTERFACE_ENTRYマクロの 1 つ以上のインターフェイスのエントリが追加され、地図END_COM_MAPマクロと完了です。たとえば:

BEGIN_COM_MAP(CMyObject)特価;COM_INTERFACE_ENTRY(IDispatch)COM_INTERFACE_ENTRY(IMyObject)END_COM_MAP)(&N)

ATL を参照してください COMMAPサンプル エントリ マクロの例の異なる種類の COM を使用してのマップの。

COM マップ内の最初のエントリ、COM マップを含んでいるオブジェクト上のインターフェイスをする必要がありますに注意してください。したがって、 COM_INTERFACE_ENTRY_CHAIN時点で検索するには、別のオブジェクトの COM マップと、COM マップ エントリを開始することはできませんどこCOM_INTERFACE_ENTRY_CHAIN (COtherObject 、オブジェクトの COM マップに表示されます。別のオブジェクトの COM マップを最初に検索、 IUnknownの COM マップにインターフェイス エントリを追加する場合は、他のオブジェクトの COM マップをチェーンします。たとえば:

BEGIN_COM_MAP(CThisObject)特価;COM_INTERFACE_ENTRY(IUnknown)COM_INTERFACE_ENTRY_CHAIN(COtherObject)END_COM_MAP)(&N)

注意特価;バージョン 3.0 では、ATL を使用して、コンパイラ キーワード_ _uuidof (特定クラスの対応する IID を取得するクラスCOM_INTERFACE_ENTRYマクロ バージョン 3.0 で効果的な変更のため、今あなたのヘッダーも、一致する Iid は、インターフェイスの定義をライブラリにリンクする代わりに、使用するインターフェイスを含めるだけです。ヘッダーが以前 MIDL の古いバージョンによって生成された場合、または、手コーディングされ、適切にマークされていない場合、この変更は原因することができます。ヘッダーでインターフェイスを宣言がマークされていない場合、関連付けを_ _declspec ( uuid し、そのインターフェイスが失敗するため、 _ _uuidofキーワードを使用するとします。問題この新しい動作を回避するには、ビルド設定で_ATL_NO_UUIDOFを定義することにより、古い (ATL 2.x) COM_INTERFACE_ENTRYマクロを戻すことができます。(&N)。

使用可能なエントリ マクロを次に示します:

COM マップ エントリ マクロ

COM_INTERFACE_ENTRY
COM_INTERFACE_ENTRY_IID
COM_INTERFACE_ENTRY2
COM_INTERFACE_ENTRY2_IID
COM_INTERFACE_ENTRY_FUNC
COM_INTERFACE_ENTRY_FUNC_BLIND
COM_INTERFACE_ENTRY_TEAR_OFF
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF
COM_INTERFACE_ENTRY_AGGREGATE
COM_INTERFACE_ENTRY_AGGREGATE_BLIND
COM_INTERFACE_ENTRY_AUTOAGGREGATE
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND
COM_INTERFACE_ENTRY_CHAIN
COM_INTERFACE_ENTRY_BREAK
COM_INTERFACE_ENTRY_NOINTERFACE

ATL マクロとグローバル関数

Index