次の方法で共有


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

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

このクラスを使用するには、次のようにします。

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

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

  • QueryInterface を介してデュアルインターフェイスを公開するには、エントリを COM マップに追加します。

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

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

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

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

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

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

Note

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

IDispatch の実装

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

Note

ATL には、IDispEventImpl および IDispEventSimpleImpl クラスが用意されており、互換性のあるデュアル インターフェイスの定義を含むタイプライブラリを必要とすることなく、ディスパッチ インターフェイスを実装するのに役立ちます。

関連項目

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