次の方法で共有


COM_INTERFACE_ENTRY に関するマクロ

この種のマクロは、オブジェクトのインターフェイスをその COM マップに入力して、QueryInterface がオブジェクトのインターフェイスにアクセスできるようにします。 QueryInterface の実行中、インターフェイスは IID と一致するかどうかをチェックされます。チェックの順序は、COM マップに入力された順序になります。

QueryInterface を通じてインターフェイスを公開するオブジェクトには、そのオブジェクト独自の COM マップが含まれている必要があります。 COM マップは、BEGIN_COM_MAP マクロで開始します。 次に、1 つ以上の COM_INTERFACE_ENTRY マクロを使用して、インターフェイスのエントリを追加します。追加し終わったら、END_COM_MAP マクロで COM マップを終了します。 次に例を示します

BEGIN_COM_MAP(CMyObject)
   COM_INTERFACE_ENTRY(IMyObject)
   COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

COM マップ内の最初のエントリは、COM マップを格納しているオブジェクトのインターフェイスである必要があります。 したがって、COM マップの先頭に COM_INTERFACE_ENTRY_CHAIN のエントリを置かないようにしてください。そうしないと、COM_INTERFACE_ENTRY_CHAIN(COtherObject) の位置で別のオブジェクトの COM マップが検索されるようになってしまいます。 最初に別のオブジェクトの COM マップを検索する場合は、IUnknown インターフェイスのエントリを COM マップに追加した後、別のオブジェクトの COM マップをチェインします。 次に例を示します

BEGIN_COM_MAP(CThisObject)
   COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

ヒント

ATL Version 3.0 では、コンパイラ キーワード __uuidof( class ) を使用して、指定されたクラスの対応する IID を取得します。 Version 3.0 では COM_INTERFACE_ENTRY マクロに変更を加えたことによって、使用するインターフェイスのヘッダーをインクルードするだけで済むようになり、インターフェイスに対応する IID を定義するライブラリをリンクする必要はなくなりました。 ただし、ヘッダーが以前のバージョンの MIDL によって事前に生成されていたり、手動で入力されていて、正しくマークされていない場合には、問題が発生する場合があります。 ヘッダーのインターフェイスの宣言が、関連する __declspec( uuid ) によってマークされていない場合は、そのインターフェイスに __uuidof キーワードを使用しても失敗となります。 この新しい動作による問題を回避するには、ビルド オプションの設定で _ATL_NO_UUIDOF を定義することによって、古い (ATL 2.x) COM_INTERFACE_ENTRY マクロに戻すことができます。

COM マップのエントリに関するマクロ

エントリ用のマクロを次に示します。

要件

**ヘッダー:**atlcom.h

参照

その他の技術情報

COM マップに関するマクロ

ATL マクロ