1

Microsoft COM と XPCOM については、少なくとも私がこれまでに読んで収集したものから、コンポーネント内のインターフェイスの実装は、すべての仮想インターフェイスを派生させる単一のクラスに本質的に存在する必要があることがわかりました。これは正しいです?私は何が欠けていますか?

複数のオブジェクト (おそらく別の DLL) がそれぞれの機能を提供し、QueryIterface を使用してそれらの間を自由に遷移できるようにする方法はありますか?

私が探しているのは、いくつかの機能を備えたコンポーネントを持つことですが、外部クライアント コードが (おそらく) 新しいインターフェイスを備えたコンポーネントの新しい拡張機能を作成できるようにすることです。理想的には、これはコンポーネントの現在のソースとその実装を漏らさずに行うべきです。

4

2 に答える 2

1

これは可能ですが、おそらく標準の高レベル ラッパーではサポートされていません。ほとんどのラッパー (ATL、MFC など) は、COM オブジェクトの単一クラスへのマッピングのみをサポートします。ただし、QueryInterface は別のポインターを返し、COM オブジェクト コードを呼び出すことができるため、最初の COM オブジェクトは別の DLL をロードし、別のオブジェクトをインスタンス化し、そのインターフェイス (vtable) へのポインターを返すことができます。

私の知る限り、それはすべて可能です。多くの低レベルのグルー コードを自分で記述している可能性があります。

于 2008-10-25T00:38:52.567 に答える
0

はい、ATL はティアオフ インターフェイスをサポートしています 。これにより、インターフェイスが要求された場合にのみインスタンス化される別のクラスにインターフェイスを実装できます。インターフェイスしか渡さないので、別の DLL に入れることもできると思います。

(一度リクエストした後にキャッシュすることもできます)

于 2008-10-26T20:47:18.763 に答える