次の方法で共有


複数のデュアル インターフェイス

多重継承のデュアル インターフェイス (つまり、vtable と遅延バインディングの柔軟性、スクリプト言語、または C++ では、クラスを使用できるようになります) の利点を結合する場合。

単一の COM オブジェクトの複数のデュアル インターフェイスを公開することもできますが、それは推奨されません。複数のデュアル インターフェイスがある場合は、公開された IDispatch の 1 種類のインターフェイスだけ必要があります。使用可能な方法は、このケースに該当するために関数または拡張されたコードの複雑度の損失などの低下を行います。この方法を検討する開発者は、利点と欠点速度が重視する必要があります。

単一の IDispatch インターフェイスの公開

IDispatchImplの複数の特化型から派生して単一のオブジェクトの複数のデュアル インターフェイスを公開することができます。ただし、クライアントが IDispatch のインターフェイスに対して問い合わせることが許可されます COM_INTERFACE_ENTRY2IDispatchかの実装として使用される基本クラスを指定するマクロ COM_INTERFACE_ENTRY_IID (または) を使用する必要があります。

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

IDispatch の 1 種類のインターフェイスだけ公開されるため、IDispatch のインターフェイスを通じてのみ、オブジェクトにアクセスできないクライアントは、そのほかのインターフェイス メソッドやプロパティにアクセスします。

IDispatch の単一の実装への複数のデュアル インターフェイスの結合

ATL は IDispatchの単一の実装に複数のデュアル インターフェイスを結合するにはサポートされません。ただし、手動で QueryInterface の機能を実行するには、新しいオブジェクトを作成するか、または IDispatch のインターフェイスを作成するには、入れ子になったオブジェクトの typeinfo ベースの実装を使用する IDispatch の別のインターフェイスの共用体を含むテンプレート クラスの作成など、インターフェイスを組み合わせることにはいくつかの既知の方法があります。

これらの方法には、名前空間の衝突の問題を持ち、複雑さや保守性です。複数のデュアル インターフェイスを作成することは推奨されません。

参照

概念

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