2

2 つの COM オブジェクトを ID (別名 IUnknown へのポインター) ではなく、値 (別名プライベート状態) に基づいて比較する方法について確立されたパターンはありますか?

4

2 に答える 2

4

オブジェクトの等価性は、実装の重要な詳細であり、COM には隠されています。COM はインターフェイス ベースのオブジェクト モデルであり、これらのインターフェイスの実装が必要であるという事実は慎重に隠されています。CoCreateInstance() は明らかな場所です。IUnknown のルールはそれほど明白ではありません。その適切な実装では、実装されたインターフェイスのいずれかを介して QI を行うときに、同じ IUnknown インターフェイス ポインターを取得する必要があります。これは、オブジェクトの同一性ではなく、オブジェクトの同一性を提供します。

オブジェクトの等価性をテストするために一般的に使用される標準の COM インターフェイス型はありません。自分で作るしかありません。IsEqualTo() メソッドを使用した単純なもので、仕事が完了します。または、そのメソッドをデフォルトのインターフェースに追加することもできます。

于 2012-12-20T21:27:24.730 に答える
1

「私的状態」の定義によります。COM オブジェクトは、COM オブジェクトを持つ必要はありません。オブジェクトIPersist*がインターフェイスのファミリを実装している場合、特に。IPersistStreamInitの場合、両方を永続ストリームまたはプロパティ バッグに保存してから、ストリームのバイト単位の比較など、ストレージを直接比較できます。

于 2012-12-20T19:51:39.420 に答える