5

COM アグリゲーションの内部オブジェクトとして使用できるオブジェクトを実装するのは比較的簡単であると、COM に関する多くの書籍などで指摘されていることに気付きました。ただし、何かが欠けていない限り、集計は非常に限られたシナリオでしか成功しないように思われるため、そのようなシナリオが具体的に認識された場合にのみサポートを提供する必要があります。

気になる部分は以下の通り。COM 集約は、内部オブジェクトの ID を外部オブジェクトの ID と結合します。外部オブジェクトの実装者は、内部オブジェクトのインターフェースのサブセットを選択し、それらのインターフェースに対する要求を内部オブジェクトに転送します。内側のオブジェクトは、インターフェイスに対するすべての要求を外側のオブジェクトに転送します。ここで、内部オブジェクトが実装の一部として、子 COM オブジェクトを構築するとします。おそらく、インターフェイス ポインターがその COM オブジェクトに渡され、その親と通信できるようになります。内側のオブジェクトには、実装するインターフェイスのアイデアがいくつかあります。ただし、外部オブジェクトは、これらのインターフェイスの一部を転送しないことを選択した可能性があります。実際、ドキュメントには、外側のオブジェクトがインターフェイスを盲目的に転送すべきではないと記載されています。これは、外部オブジェクトがすべてのインターフェイスを内部オブジェクトに転送することが特に必要でない限り、内部オブジェクトが他の COM オブジェクトへのインターフェイス ポインターを渡すことができないことが多いことを意味しているようです。これは、子オブジェクトのシナリオに限定されません。実際、内部オブジェクトの実装がインターフェイス ポインターを渡す場所はすべて、影響を受ける可能性があるように見えます。

したがって、集約は一般的な目的ではないように見えます。これは、内部オブジェクトが他の COM オブジェクトと通信する必要がある場合、どのインターフェイスを最小限転送する必要があり、それ以上のインターフェイスを追加できないかについて、外部オブジェクトに厳密な要件を課すためです。これらのインターフェイスを転送しない既存の外部オブジェクトとの互換性を損なうことなく、内部オブジェクトの将来のバージョンでこのリストを使用します。

これは物事が実際にどうあるべきかについての正しい (そしてめったに文書化されていない) 説明ですか、それとも話にはもっとありますか?

4

2 に答える 2

1

私がこれまでに実装した、または実装されたのを見たすべてのCOMオブジェクトには、createメソッドに集約なしのチェックがあります。MSFTが出荷するCOMオブジェクトのほとんどは、集約をサポートしていません。

于 2009-04-22T18:03:27.757 に答える