次の方法で共有


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

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

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

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

  • IDispatchImpl (テンプレート引数としてインターフェイスとタイプ ライブラリに関するパス情報) の特化したクラスからクラスを派生します。

  • QueryInterfaceによってデュアル インターフェイスを公開するための COM マップにエントリ (複数可) を追加します。

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

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

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

次によって、実行時に新しいインターフェイスおよび新しいクラスを作成する場合は、ATL クラスの追加]ダイアログ ボックス[ATL シンプル オブジェクト ウィザード]を使用できます。

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

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

[!メモ]

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

IDispatch の実行

COM マップに該当するエントリを指定することで、ディスパッチ インターフェイスの実装を IDispatchImpl の基本クラスを使用して、対応するデュアル インターフェイスを記述するタイプ ライブラリが存在する限り用意するために COM_INTERFACE_ENTRY2 (または COM_INTERFACE_ENTRY_IID のマクロを使用)。これは、共通 IDispatch のインターフェイスを実装するにしたがって、たとえばです。ATL シンプル オブジェクト ウィザード実装とは IDispatch をこのように実行するために適切なマップ エントリの追加とはどちらも想定するウィザードを実装します。

[!メモ]

ATL は、互換性のあるデュアル インターフェイスの定義を含むタイプ ライブラリを必要とせずに、ディスパッチ インターフェイスを実行できるように IDispEventImplIDispEventSimpleImpl のクラスを提供します。

参照

概念

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