3

com スレッド モデルについて少し混乱しています。

インプロセス サーバーがあり、CoInitializeEx で使用されるスレッド モデルやフラグに関係なく、任意のスレッドからアクセスできるインターフェイスを作成したいと考えています。

あるスレッドから別のスレッドにインターフェイスを渡すとき、問題なく CoMarshalInterface/CoUnmarshalInterface を使用しますが、それを回避してインターフェイス ポインターを直接渡す方法が存在するかどうかを知りたいです。

ニュートラル アパートメントを使用するインターフェイスを作成しようとしましたが、問題を回避するために CoMarshalInterface/CoUnmarshalInterface を呼び出す必要があります。

よろしく、マウロ。

4

1 に答える 1

3

COM オブジェクトは 1 つのアパートメントにのみ存在します。フリー スレッド マーシャリング アグリゲートを利用できる適切なシナリオでない限り、アパートメントの境界を越えてインターフェイス ポインターを介して COM オブジェクトにアクセスすることは決して良い考えではありません。フリー スレッド マーシャラーは、基本的に、アパートメントとスレッドに関係なく、このインターフェイスのすべてのクライアントが同じプロセスにあり、オブジェクト自体に依存して同期とスレッド セーフを維持することを意味します。オブジェクト自体は、フリースレッド マーシャラー インターフェイスを集約する必要があるため、クライアント コードだけでなく、オブジェクトの作成者でもあることを願っています。

フリースレッド マーシャリングの詳細については、msdn.com を参照してください。ただし、私が何度も何度も再利用する傾向があるオブジェクトを扱っている記事の 1 つが、この 1です。

お役に立てば幸いです。

于 2012-10-28T23:44:43.697 に答える