アパートメント間のインターフェイスへのアクセス
COMは、プロセス内の任意のアパートメントが、プロセス内の他のアパートメント内のオブジェクトに実装されているインターフェイスにアクセスする方法を提供します。 これは、IGlobalInterfaceTableインターフェイスを介して行われます。 このインターフェイスには、次の3つのメソッドがあります。
- インターフェイスをグローバル (プロセス全体) インターフェイスとして登録します。
- Cookieを使用して、他のアパートメントからそのインターフェイスへのポインターを取得します。
- インターフェイスのグローバル登録を取り消します。
IglobalInterfaceTableインターフェイスは、プロセス内の複数のアパートメントからアクセスできるメモリ位置にインターフェイスポインターを格納するための効率的な方法です。これには、プロセス全体の変数や、他のオブジェクトへのインターフェイスポインターを含むアジャイルオブジェクト(フリースレッド化され、整列化されたオブジェクト)などがあります。
アジャイルオブジェクトは、実行されている基になるCOMインフラストラクチャを認識しません。つまり、どのアパートメント、コンテキスト、およびスレッドで実行されているかを示します。 オブジェクトは、アパートメントまたはコンテキストに固有のインターフェイスを保持している可能性があります。 このため、アジャイルコンポーネントが実行されている場所からこれらのインターフェイスを呼び出すと、常に正常に動作するとは限りません。 グローバルインターフェイステーブルは、アジャイルオブジェクトが実行されている場所に基づいて、オブジェクトへの有効なプロキシ (または直接ポインター) が使用されることを保証することによって、この問題を回避します。
Note
グローバルインターフェイステーブルは、プロセスまたはコンピューターの境界を越えて移植できないため、通常のパラメーターを渡すメカニズムの代わりに使用することはできません。
グローバルインターフェイステーブルの作成と使用の詳細については、次のトピックを参照してください。
関連トピック