Note
この記事では、Tlbimp.exe やプライマリ相互運用機能アセンブリなどのレガシ ツールとデプロイ モデルを使用する .NET Framework COM 相互運用ガイダンスについて説明します。 最新の.NETの場合は、COM ソース生成または ComWrappers API を使用します。 詳細については、「 COM 相互運用」を参照してください。
通常、COM 型定義はタイプ ライブラリに存在します。 これに対し、CLS 準拠コンパイラは、アセンブリ内で型メタデータを生成します。 型情報の 2 つのソースは、まったく異なります。 このトピックでは、タイプ ライブラリからメタデータを生成する手法について説明します。 結果のアセンブリは相互運用機能アセンブリと呼ばれ、それに含まれる型情報により、.NET アプリケーションで COM 型を使用できるようになります。
この種類の情報をアプリケーションで使用できるようにするには、次の 2 つの方法があります。
デザイン時専用相互運用機能アセンブリの使用: 相互運用機能アセンブリの型情報を実行可能ファイルに埋め込むようコンパイラに指示できます。 コンパイラは、アプリケーションが使用する型情報のみを埋め込みます。 アプリケーションと相互運用機能アセンブリをデプロイする必要はありません。 これが推奨される手法です。
相互運用機能アセンブリの配置: 相互運用機能アセンブリへの標準参照を作成できます。 この場合、相互運用機能アセンブリをアプリケーションと共に配置する必要があります。 この手法を使用していて、プライベート COM コンポーネントを使用していない場合は、マネージド コードに組み込む予定の COM コンポーネントの作成者によって発行されたプライマリ相互運用機能アセンブリ (PIA) を常に参照してください。 プライマリ相互運用機能アセンブリの生成と使用の詳細については、「 プライマリ相互運用機能アセンブリ」を参照してください。
デザイン時のみの相互運用機能アセンブリを使用する場合は、COM コンポーネントの作成者によって発行されたプライマリ相互運用機能アセンブリから型情報を埋め込むことができます。 ただし、プライマリ相互運用機能アセンブリをアプリケーションと共にデプロイする必要はありません。
デザイン時専用相互運用機能アセンブリを使用すると、ほとんどのアプリケーションで COM コンポーネントのすべての機能が使用されるわけではないため、アプリケーションのサイズが小さくなります。 コンパイラは、型情報を埋め込むときに非常に効率的です。アプリケーションで COM インターフェイスの一部のメソッドのみを使用する場合、コンパイラは未使用のメソッドを埋め込むことはありません。 型情報が埋め込まれたアプリケーションが別のアプリケーションとやり取りする場合、またはプライマリ相互運用機能アセンブリを使用するアプリケーションと対話する場合、共通言語ランタイムは型の等価性ルールを使用して、同じ名前の 2 つの型が同じ COM 型を表しているかどうかを判断します。 COM オブジェクトを使用するために、これらの規則を知る必要はありません。 ただし、ルールに関心がある場合は、「 型の等価性」と「埋め込み相互運用機能型」を参照してください。
メタデータの生成
COM タイプ ライブラリは、Loanlib.tlb などの .tlb 拡張子を持つスタンドアロン ファイルにすることができます。 一部のタイプ ライブラリは、.dll または .exe ファイルのリソース セクションに埋め込まれています。 タイプ ライブラリ情報の他のソースは、.olb ファイルと .ocx ファイルです。
ターゲット COM 型の実装を含むタイプ ライブラリを見つけたら、型メタデータを含む相互運用機能アセンブリを生成するための次のオプションがあります。
Visual Studio
Visual Studio は、タイプ ライブラリ内の COM 型をアセンブリ内のメタデータに自動的に変換します。 手順については、「 タイプ ライブラリへの参照を追加する」を参照してください。
-
タイプ ライブラリ インポーターには、結果の相互運用ファイル内のメタデータを調整するコマンド ライン オプションが用意されており、既存のタイプ ライブラリから型をインポートし、相互運用機能アセンブリと名前空間を生成します。 手順については、「 タイプ ライブラリから相互運用機能アセンブリを生成する」を参照してください。
System.Runtime.InteropServices.TypeLibConverter クラス
このクラスは、タイプ ライブラリ内のコクラスとインターフェイスをアセンブリ内のメタデータに変換するメソッドを提供します。 Tlbimp.exeと同じメタデータ出力が生成されます。 ただし、Tlbimp.exeとは異なり、 TypeLibConverter クラスはメモリ内タイプ ライブラリをメタデータに変換できます。
カスタム ラッパー
タイプ ライブラリが使用できない場合、または正しくない場合は、マネージド ソース コードでクラスまたはインターフェイスの重複する定義を作成する方法があります。 次に、ランタイムを対象とするコンパイラを使用してソース コードをコンパイルし、アセンブリ内のメタデータを生成します。
COM 型を手動で定義するには、次の項目にアクセスできる必要があります。
定義されているコクラスとインターフェイスの正確な説明。
適切な.NET クラス定義を生成できるコンパイラ (C# コンパイラなど)。
タイプ ライブラリからアセンブリへの変換規則に関する知識。
カスタムラッパーを記述することは高度な手法です。 カスタム ラッパーを生成する方法の詳細については、「標準ラッパー のカスタマイズ」を参照してください。
COM 相互運用インポート プロセスの詳細については、「 タイプ ライブラリからアセンブリへの変換の概要」を参照してください。
こちらも参照ください
.NET