次の方法で共有


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

更新 : 2007 年 11 月

デュアル インターフェイスの利点 (つまり、vtable と遅延バインディングの両方の柔軟性により、スクリプト言語と C++ でクラスを使用できること) を、多重継承の技法と組み合わせることができます。

複数のデュアル インターフェイスを単一の COM オブジェクトで公開できますが、これはお勧めしません。複数のデュアル インターフェイスがある場合は、1 つの IDispatch インターフェイスだけが公開されている必要があります。これを確実に行うために使用できる技法では、関数の喪失やコードの複雑さの増加などの性能低下が生じます。この方法の採用を検討している開発者は、長所と短所の重みを慎重に検討する必要があります。

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

IDispatchImpl の 2 つ以上の特殊な形式から派生することにより、1 つのオブジェクトに複数のデュアル インターフェイスを公開できます。ただし、クライアントが IDispatch インターフェイスを問い合わせできるようにする場合は、COM_INTERFACE_ENTRY2 マクロ (または COM_INTERFACE_ENTRY_IID) を使用して、IDispatch の実装に使用する基本クラスを指定します。

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

IDispatch インターフェイスは 1 つだけ公開されるため、IDispatch インターフェイスだけを通じてオブジェクトにアクセスできるクライアントは、他のインターフェイスのメソッドまたはプロパティにアクセスできません。

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

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

これらの方法には、名前空間の衝突の可能性、およびコードの複雑さと保守性に問題があります複数のデュアル インターフェイスの作成はお勧めできません。

参照

概念

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