次の方法で共有


COM_INTERFACE_ENTRY に関するマクロ

更新 : 2007 年 11 月

この種のマクロは、オブジェクトのインターフェイスをその 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()
xfb1zk2x.alert_caution(ja-jp,VS.90).gif注意 :

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 マクロ