ランタイム呼び出し可能ラッパー

共通言語ランタイムは、ランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrapper) と呼ばれるプロキシを経由して COM オブジェクトを公開します。RCW は、.NET クライアントからは普通のオブジェクトのように見えますが、RCW の主な機能は、.NET クライアントと COM オブジェクト間の呼び出しをマーシャリングすることです。

ランタイムは、オブジェクトに存在する参照の数に関係なく、各 COM オブジェクトに 1 つの RCW を作成します。ランタイムは、各オブジェクトについてプロセスごとに 1 つの RCW を保持します。RCW をアプリケーション ドメインまたはアパートメントに作成し、別のアプリケーション ドメインまたはアパートメントへの参照を渡す場合は、最初のオブジェクトへのプロキシが使用されます。次の図に示すように、任意の数のマネージ クライアントが、INew インターフェイスおよび INewer インターフェイスを公開する COM オブジェクトへの参照を保持できます。

ランタイム呼び出し可能ラッパー経由の COM オブジェクト アクセス

RCW

ランタイムは、タイプ ライブラリから派生したメタデータを使用して、呼び出される COM オブジェクトとそのオブジェクトのためのラッパーを作成します。各 RCW は、RCW でラップした COM オブジェクトのインターフェイス ポインタのキャッシュを保持し、RCW が不要になった時点で COM オブジェクトの参照を解放します。ランタイムは、RCW に対してガベージ コレクションを実行します。

RCW は、他の目的にも利用されますが、ラップされたオブジェクトに代わって、マネージ コードとアンマネージ コード間のデータをマーシャリングします。つまり、クライアントとサーバーの間で異なる表現のデータを受け渡しする場合は、RCW は常にメソッドの引数とメソッドの戻り値をマーシャリングします。

標準のラッパーは、組み込みのマーシャリング規則を適用します。たとえば、.NET クライアントがアンマネージ オブジェクトに引数の一部として文字列型を渡すと、ラッパーはその文字列を BSTR 型に変換します。また、COM オブジェクトがマネージ呼び出し元に BSTR を返した場合、呼び出し元は文字列型を受け取ります。クライアントもサーバーも、それぞれが使い慣れたデータ型を使用して送信と受信を行うことができます。これ以外の型の場合、変換は不要になります。たとえば、4 バイト整数の場合、標準のラッパーは、型を変換せずに、マネージ コードとアンマネージ コードの間で常に 4 バイト整数を受け渡します。

参照

概念

COM ラッパー
選択したインターフェイスのマーシャリング
COM 呼び出し可能ラッパー
タイプ ライブラリのアセンブリとしてのインポート

その他の技術情報

タイプ ライブラリからアセンブリへの変換の要約