標準ラッパーのカスタマイズ
更新 : 2007 年 11 月
このトピックでは、標準のランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrappers) および COM 呼び出し可能ラッパー (CCW: COM Callable Wrapper) をカスタマイズするために使用するプロセスを説明します。
ランタイム呼び出し可能ラッパー
.NET のクライアントが COM オブジェクトをアクティブにすると、ランタイムは、ランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrapper) のインスタンスを生成してその COM 型をラップします。次の図に示すように、ランタイムは、インポートされた COM タイプ ライブラリから取得したメタデータを使用して RCW を生成します。ラッパーは、相互運用マーシャリング サービスによって設定された規則に基づいてデータをマーシャリングします。
RCW の生成とメソッドの呼び出し
RCW は 2 とおりの方法でカスタマイズできます。インターフェイス定義言語 (IDL: Interface Definition Language) のソース コードを変更できる場合は、タイプ ライブラリ ファイル (TLB) の属性を適用し、タイプ ライブラリをインポートできます。もう 1 つの方法は、インポートした型に相互運用機能専用の属性を適用し、新しいアセンブリを生成する方法です。標準の RCW のカスタマイズのサポートは、相互運用機能専用の属性によって制限されます。手順については、「方法 : ランタイム呼び出し可能ラッパーをカスタマイズする」を参照してください。
COM 呼び出し可能ラッパー
COM 呼び出し可能ラッパー (CCW: COM Callable Wrapper) は、COM に対して .NET Framework のオブジェクトを公開します。マネージ プロジェクトをアセンブリ DLL にコンパイルすると、アセンブリ内のそれぞれの型を記述するのに必要なメタデータが自動的に作成されます。COM クライアントがマネージ オブジェクトをアクティブにするたびに、ランタイムは、このメタデータを使用して CCW を作成します。
CCW をカスタマイズするには、次の図に示すように、マネージ ソース コードに相互運用機能専用の属性を適用し、そのソースをアセンブリにコンパイルします。この例では、Tlbexp.exe によってマネージ型が COM に変換されます。
CCW の生成とメソッドの呼び出し
コードに属性を適用することにより、相互運用マーシャリング サービスの範囲内でインターフェイスの動作とデータ マーシャリングの動作を変更できます。たとえば、引数としてメソッドに渡されるデータの書式を制御できます。また、アセンブリ内のどの型を COM に公開するかを制御することもできます。