マネージ コードでの COM 型の使用

アセンブリで定義されている COM 型は、他のマネージ型と同様に機能します。 マネージ クライアントでは、通常の方法で COM 型の新しいインスタンスを生成し、他のマネージ クラスの場合と同じ方法で、メタデータからクラス情報を取得できます。 メソッドの構文は、他のマネージ クラスの場合と同様に、オブジェクト ビューアーで検査するか、またはリフレクションを使って取得できます。 COM オブジェクトがエラー HRESULT を返すと、.NET Framework クライアントはそれに対応する例外をキャッチします。

アプリケーションで COM 型との相互運用を可能にする型情報を含める方法は 2 つあります。

  • 埋め込まれた相互運用機能型を使用する: .NET Framework Version 4 以降では、相互運用機能アセンブリから実行可能ファイルに型情報を埋め込むようにコンパイラに指示できます。 コンパイラは、アプリケーションが使用する型情報のみを埋め込みます。 アプリケーションで相互運用機能アセンブリを配置する必要はありません。 この手法を使用することをお勧めします。

  • 相互運用機能アセンブリを配置する: 相互運用機能アセンブリへの標準の参照を作成できます。 この場合、アプリケーションで相互運用機能アセンブリを配置する必要があります。 この手法を採用する場合に、プライベートの COM コンポーネントを使用しないときは、必ず、マネージ コードに組み込む COM コンポーネントの作成者が発行したプライマリ相互運用機能アセンブリ (PIA) を参照してください。 プライマリ相互運用機能アセンブリの作成と使用の詳細については、「プライマリ相互運用機能アセンブリ」を参照してください。

メモメモ

埋め込まれた相互運用機能型を使用する場合、それらは COM コンポーネントの作成者が発行したプライマリ相互運用機能アセンブリから埋め込むことができます。ただし、アプリケーションで相互運用機能アセンブリを配置する必要はありません。

COM コンポーネントのすべての機能を使用するアプリケーションはほとんどないため、埋め込まれた相互運用機能型を使用するとアプリケーションのサイズが小さくなります。 コンパイラは、型情報を埋め込むとき、非常に効率的に処理を実行します。アプリケーションが COM インターフェイスの一部のメソッドしか使用しない場合、コンパイラは使用されないメソッドの埋め込みは行いません。 埋め込み型情報を持つアプリケーションが他の同様のアプリケーションと対話したり、プライマリ相互運用機能アセンブリを使用するアプリケーションと対話したりするとき、共通言語ランタイムは型等価性の規則を使用して、同じ名前を持つ 2 つの型が同じ COM 型を表しているかどうかを確認します。

実行中の COM オブジェクトへの参照の取得および解放は、他の実行中のマネージ オブジェクトへの参照の取得および解放と同様です。 .NET Framework クライアントが COM オブジェクトへの参照を取得したり解放したりすると、ランタイムは、他の COM クライアントと同様に、COM オブジェクトの参照カウントを保持します。また、.NET Framework クライアントは、他のマネージ サーバー オブジェクトの場合と同様に、そのオブジェクトをガベージ コレクションの対象と見なして動作できます。

Visual Studio では、アプリケーションまたはアドインに型情報を簡単に埋め込むことができます。 使用例については、「チュートリアル: Microsoft Office アセンブリからの型情報の埋め込み (C# および Visual Basic)」および「チュートリアル: マネージ アセンブリからの型の埋め込み (C# および Visual Basic)」を参照してください。

このセクションのトピックに関連するコード サンプルについては、「COM 相互運用機能のサンプル : .NET クライアントおよび COM サーバー」を参照してください。

型等価性の規則については、「型の等価性と埋め込まれた相互運用機能型」に説明されています。 ただし、COM オブジェクトを使用するために、これらの規則について理解しておく必要はありません。

参照

処理手順

チュートリアル: マネージ アセンブリからの型の埋め込み (C# および Visual Basic)

概念

.NET Framework への COM コンポーネントの公開

COM 型のアセンブリの検査

COM オブジェクトのアクティブ化

メソッド、プロパティ、イベントの呼び出し

相互運用のためのデザインの考慮事項

COM ラッパー

その他の技術情報

チュートリアル: Microsoft Office アセンブリからの型情報の埋め込み (C# および Visual Basic)