COM 呼び出し可能ラッパー
COM クライアントが .NET オブジェクトを呼び出すと、共通言語ランタイムがマネージ オブジェクトとそのオブジェクトのための COM 呼び出し可能ラッパー (CCW: COM Callable Wrapper) を作成します。COM クライアントは .NET オブジェクトを直接参照できないため、CCW をマネージ オブジェクトのプロキシとして使用します。
ランタイムは、サービスを要求している COM クライアントの数に関係なく、1 つのマネージ オブジェクトに対して 1 つの CCW を作成します。次の図に示すように、複数の COM クライアントが、INew インターフェイスを公開する CCW への参照を保持できます。CCW は、INew インターフェイスを実装するマネージ オブジェクトへの 1 つの参照を保持し、ガベージ コレクションされます。COM クライアントと .NET クライアントは、同一のマネージ オブジェジェクトに対して同時に要求できます。
COM 呼び出し可能ラッパー経由の .NET オブジェクト アクセス
CCW は、.NET Framework. 内で実行されている他のクラスからは見えません。CCW の主な目的は、マネージ コードとアンマネージ コードの間の呼び出しをマーシャリングすることですが、CCW は、CCW にラップされているマネージ オブジェクトのオブジェクト ID やオブジェクトの有効期間の管理も行います。
オブジェクト ID
ランタイムは、ランタイムのガベージ コレクション ヒープから .NET オブジェクトにメモリを割り当てます。これにより、ランタイムは、メモリ内で必要に応じてオブジェクトを移動させることができます。一方、CCW に対して、ランタイムは、コレクション ヒープ以外からメモリを割り当てます。これにより、COM クライアントはラッパーを直接参照できます。
オブジェクトの有効期間
CCW にラップされている .NET クライアントとは異なり、CCW は、従来の COM 方式で参照カウントを使用します。CCW の参照カウントが 0 (ゼロ) に達すると、ラッパーはマネージ オブジェクトの参照を解放します。参照が残っていないマネージ オブジェクトは、次のガベージ コレクション サイクルで収集されます。
参照
関連項目
COM 呼び出し可能ラッパー
概念
COM ラッパー
COM インターフェイスのシミュレート
ランタイム呼び出し可能ラッパー
COM への .NET Framework コンポーネントの公開