デュアル インターフェイスの実装

更新 : 2007 年 11 月

IDispatchImpl クラスを使用して、デュアル インターフェイスを実装できます。このクラスは、デュアル インターフェイスの IDispatch メソッドの既定の実装を提供します。詳細については、「Implementing the IDispatch Interface」を参照してください。

このクラスを使用するには、次の手順に従います。

  • タイプ ライブラリにデュアル インターフェイスを定義します。

  • IDispatchImpl の特殊な形式からクラスを派生します。インターフェイスとタイプ ライブラリに関する情報をテンプレート引数として渡します。

  • エントリ (1 つ以上の) を COM マップに追加し、QueryInterface を通じてデュアル インターフェイスを公開します。

  • クラスのインターフェイスの vtable 部分を実装します。

  • インターフェイス定義を含むタイプ ライブラリが実行時にオブジェクトから使用可能であることを確認します。

ATL シンプル オブジェクト ウィザード

新しいインターフェイスと、そのインターフェイスを実装する新しいクラスを作成する場合は、[クラスの追加] ダイアログ ボックスの ATL ノードから、ATL シンプル オブジェクト ウィザードを起動します。

インターフェイス実装ウィザード

既存のインターフェイスがある場合は、インターフェイス実装ウィザードを使用して、必要な基本クラス、COM マップ エントリ、およびメソッドのスケルトン実装を既存のクラスに追加します。

ff8baszx.alert_note(ja-jp,VS.90).gifメモ :

タイプ ライブラリのメジャー バージョン番号とマイナ バージョン番号が IDispatchImpl 基本クラスにテンプレート引数として渡されるようにするために、生成された基本クラスの調整が必要な場合があります。インターフェイス実装ウィザードは、タイプ ライブラリのバージョン番号をチェックしません。

IDispatch の実装

対応するデュアル インターフェイスを記述しているタイプ ライブラリがある限り、COM マップに適切なエントリを指定するだけで (COM_INTERFACE_ENTRY2 マクロまたは COM_INTERFACE_ENTRY_IID マクロを使用)、IDispatchImpl 基本クラスを使用してディスパッチ インターフェイスを実装できます。この方法での IDispatch インターフェイスの実装はごく一般的です。次に例を示します。ATL シンプル オブジェクト ウィザードとインターフェイス実装ウィザードは、どちらもこの方法で IDispatch を実装することを想定するため、マップに適切なエントリを追加します。

ff8baszx.alert_note(ja-jp,VS.90).gifメモ :

ATL には、互換性のあるデュアル インターフェイスの定義を含むタイプ ライブラリを必要とせずにディスパッチ インターフェイスを実装するための IDispEventImpl クラスと IDispEventSimpleImpl クラスが用意されています。

参照

概念

デュアル インターフェイスと ATL