アパートメント間のインターフェイスへのアクセス

COMは、プロセス内の任意のアパートメントが、プロセス内の他のアパートメント内のオブジェクトに実装されているインターフェイスにアクセスする方法を提供します。 これは、IGlobalInterfaceTableインターフェイスを介して行われます。 このインターフェイスには、次の3つのメソッドがあります。

  • インターフェイスをグローバル (プロセス全体) インターフェイスとして登録します。
  • Cookieを使用して、他のアパートメントからそのインターフェイスへのポインターを取得します。
  • インターフェイスのグローバル登録を取り消します。

IglobalInterfaceTableインターフェイスは、プロセス内の複数のアパートメントからアクセスできるメモリ位置にインターフェイスポインターを格納するための効率的な方法です。これには、プロセス全体の変数や、他のオブジェクトへのインターフェイスポインターを含むアジャイルオブジェクト(フリースレッド化され、整列化されたオブジェクト)などがあります。

アジャイルオブジェクトは、実行されている基になるCOMインフラストラクチャを認識しません。つまり、どのアパートメント、コンテキスト、およびスレッドで実行されているかを示します。 オブジェクトは、アパートメントまたはコンテキストに固有のインターフェイスを保持している可能性があります。 このため、アジャイルコンポーネントが実行されている場所からこれらのインターフェイスを呼び出すと、常に正常に動作するとは限りません。 グローバルインターフェイステーブルは、アジャイルオブジェクトが実行されている場所に基づいて、オブジェクトへの有効なプロキシ (または直接ポインター) が使用されることを保証することによって、この問題を回避します。

Note

グローバルインターフェイステーブルは、プロセスまたはコンピューターの境界を越えて移植できないため、通常のパラメーターを渡すメカニズムの代わりに使用することはできません。

 

グローバルインターフェイステーブルの作成と使用の詳細については、次のトピックを参照してください。

スレッドモデルの選択

マルチスレッドアパートメント

インプロセス サーバーのスレッドの問題

プロセス、スレッド、およびアパートメント

シングルスレッド通信とマルチスレッド通信

シングルスレッドアパートメント