COM 相互運用の概要
更新 : 2007 年 11 月
コンポーネント オブジェクト モデル (COM: Component Object Model) を使用することによって、オブジェクトはその機能を他のコンポーネントやホスト アプリケーションに公開できます。COM オブジェクトは長年にわたり Windows プログラミングの基盤として使用されてきましたが、共通言語ランタイム (CLR: Common Language Runtime) 用に設計されたアプリケーションには多数の利点があります。
COM で開発されたアプリケーションは今後置き換えられ、最終的には .NET Framework アプリケーションが使われるようになると考えられます。しかし、それまでは Visual Studio で COM オブジェクトを使用または作成することが必要な場合があります。COM との相互運用性、つまり COM 相互運用機能によって、既存の COM オブジェクトを使用しながら、独自のペースで .NET Framework に移行していくことができます。
.NET Framework を使用して COM コンポーネントを作成すると、登録を必要としない COM 相互運用機能を利用できます。これによって、複数のバージョンの DLL がコンピュータにインストールされている場合に、どの DLL バージョンを有効にするのかを制御できます。エンド ユーザーは、XCOPY または FTP を使用して、アプリケーションを実行できる自分のコンピュータ上の適切なディレクトリにコピーできます。詳細については、「登録を必要としない COM 相互運用機能」を参照してください。
マネージ コードとマネージ データ
.NET Framework 用に開発されたコードをマネージ コードと呼びます。マネージ コードには、CLR によって使用されるメタデータが含まれます。.NET Framework アプリケーションによって使用されるデータをマネージ データと呼びます。これは、メモリの割り当ておよび再要求、型チェックの実行などのデータ関連のタスクが、ランタイムによって管理されるためです。Visual Basic 2005 では既定でマネージ コードとマネージ データが使用されますが、相互運用機能アセンブリ (このページの後半で説明します) を使用することによって、COM オブジェクトのアンマネージ コードとアンマネージ データにアクセスできます。
アセンブリ
アセンブリとは、.NET Framework アプリケーションの主要なビルド ブロックです。アセンブリは機能の集合体であり、1 つ以上のファイルで構成される単一の実装ユニットとしてビルド、バージョン管理、および配置されます。各アセンブリにはアセンブリ マニフェストが含まれます。
タイプ ライブラリとアセンブリ マニフェスト
タイプ ライブラリは、メンバの名前やデータ型など、COM オブジェクトの特性を記述します。アセンブリ マニフェストは、.NET Framework アプリケーションについて同様の機能を果たします。これらに含まれている情報は次のとおりです。
アセンブリの ID、バージョン、カルチャ、およびデジタル署名。
アセンブリ実装を構成するファイル。
アセンブリを構成する型およびリソース。アセンブリからエクスポートされる型およびリソースも含まれます。
その他のアセンブリへのコンパイル時の依存関係。
アセンブリを正常に実行するために必要なアクセス許可。
アセンブリおよびアセンブリ マニフェストの詳細については、「アセンブリ」を参照してください。
タイプ ライブラリのインポートとエクスポート
Visual Studio には Tlbimp ユーティリティがあります。Tlbimp を使用すると、タイプ ライブラリから .NET Framework アプリケーションに情報をインポートできます。また、Tlbexp ユーティリティを使用して、アセンブリからタイプ ライブラリを生成できます。
Tlbimp および Tlbexp の詳細については、「タイプ ライブラリ インポータ (Tlbimp.exe)」および「タイプ ライブラリ エクスポータ (Tlbexp.exe)」を参照してください。
相互運用機能アセンブリ
相互運用機能アセンブリは、マネージ コードとアンマネージ コードを仲介する .NET Framework アセンブリであり、それに対応する .NET Framework マネージ メンバに COM オブジェクト メンバを割り当てます。Visual Basic 2005 によって作成される相互運用機能アセンブリは、相互運用性のマーシャリングなど、COM オブジェクトの操作で発生する詳細な作業の多くを処理します。
相互運用性のマーシャリング
すべての .NET Framework アプリケーションは、使用するプログラミング言語の種類に関係なく、オブジェクトを相互運用できるようにするための共通の型セットを共有します。COM オブジェクトのパラメータおよび戻り値の型は、マネージ コードで使用されるデータ型とは異なることがあります。相互運用性のマーシャリングとは、COM オブジェクトからマネージ コードへの変換およびマネージ コードから COM オブジェクトへの変換のときに、パラメータと戻り値を対応するデータ型にパッケージ化する処理です。詳細については、「相互運用マーシャリングの概要」を参照してください。