COM ラッパーCOM Wrappers

COM は、次のいくつかの重要な点で、.NET ランタイム オブジェクト モデルとは異なります。COM differs from the .NET runtime object model in several important ways:

  • COM オブジェクトのクライアントは、COM オブジェクトの有効期間を管理する必要があります。共通言語ランタイムはその環境でのオブジェクトの有効期間を管理します。Clients of COM objects must manage the lifetime of those objects; the common language runtime manages the lifetime of objects in its environment.

  • COM オブジェクトのクライアントは、サービスを提供するインターフェイスを要求し、インターフェイス ポインターを取得して、そのサービスが利用可能かどうかを確認します。Clients of COM objects discover whether a service is available by requesting an interface that provides that service and getting back an interface pointer, or not. .NET オブジェクトのクライアントは、リフレクションを使用してオブジェクトの機能の説明を取得できます。Clients of .NET objects can obtain a description of an object's functionality using reflection.

  • NET オブジェクトは、.NET ランタイムの実行環境によって管理されるメモリ内に存在します。NET objects reside in memory managed by the .NET runtime execution environment. 実行環境では、パフォーマンス上の理由からオブジェクトをメモリ内で移動させることができ、移動先のオブジェクトへのすべての参照を更新できます。The execution environment can move objects around in memory for performance reasons and update all references to the objects it moves. オブジェクトへのポインターを取得するアンマネージ クライアントは、そのオブジェクトに依存するので同じ場所にとどまります。Unmanaged clients, having obtained a pointer to an object, rely on the object to remain at the same location. これらのクライアントには、場所が固定されていないオブジェクトを処理するための機構がありません。These clients have no mechanism for dealing with an object whose location is not fixed.

このような相違を克服するために、ランタイムはラッパー クラスを提供して、マネージド クライアントとアンマネージド クライアントの両方がそれぞれの環境内でオブジェクトを呼び出していると認識するようにします。To overcome these differences, the runtime provides wrapper classes to make both managed and unmanaged clients think they are calling objects within their respective environment. マネージド クライアントが COM オブジェクトでメソッドを呼び出すたびに、ランタイムはランタイム呼び出し可能ラッパー (RCW) を作成します。Whenever your managed client calls a method on a COM object, the runtime creates a runtime callable wrapper (RCW). RCW は、特にマネージド参照機構とアンマネージド参照機構の相違を抽象化します。RCWs abstract the differences between managed and unmanaged reference mechanisms, among other things. また、ランタイムは COM 呼び出し可能ラッパー (CCW) を作成して、プロセスを反転させ、COM クライアントがシームレスに .NET オブジェクトでメソッドを呼び出せるようにします。The runtime also creates a COM callable wrapper (CCW) to reverse the process, enabling a COM client to seamlessly call a method on a .NET object. 呼び出し元のコードと、ランタイムが作成するラッパー クラスの関係を示す図を以下に示します。As the following illustration shows, the perspective of the calling code determines which wrapper class the runtime creates.

COM ラッパーの概要

ほとんどの場合、ランタイムによって生成される標準の RCW または CCW は、COM と .NET ランタイムの境界をまたがる呼び出しに対して適切なマーシャリングを提供します。In most cases, the standard RCW or CCW generated by the runtime provides adequate marshaling for calls that cross the boundary between COM and the .NET runtime. カスタム属性を使用することにより、必要に応じて、ランタイムがマネージド コードおよびアンマネージド コードを表わす方法を調整できます。Using custom attributes, you can optionally adjust the way the runtime represents managed and unmanaged code.

関連項目See also