次の方法で共有


相互運用性の概要 (C# プログラミング ガイド)

このトピックでは、C# のマネージ コードとアンマネージ コードの間の相互運用を可能にする方法について説明します。

プラットフォーム呼び出し

プラットフォーム呼び出しは、マネージ コードから、たとえば Microsoft Win32 API の関数のような、ダイナミック リンク ライブラリ (DLL) に実装されたアンマネージ関数を呼び出すことができるようにするサービスです。プラットフォーム呼び出しは、エクスポートされた関数を検索して呼び出し、必要に応じてその引数 (整数、文字列、配列、構造体など) をマーシャリングして、相互運用上の境界にまたがる動作を可能にします。

詳細については、「アンマネージ DLL 関数の処理」および「方法: プラットフォーム呼び出しを使用して Wave ファイルを再生する (C# プログラミング ガイド)」を参照してください。

[!メモ]

共通言語ランタイム (CLR) (CLR) は、システム リソースへのアクセスを管理します。CLR 外部のアンマネージ コードの呼び出しは、このセキュリティ機構をバイパスするため、セキュリティ上のリスクが生じます。たとえば、アンマネージ コードは、アンマネージ コード内のリソースを直接呼び出し、CLR のセキュリティ機構をバイパスすることがあります。詳細については、「.NET Framework Security」を参照してください。

C++ Interop

C++ interop (IJW (It Just Works) とも呼ばれる) を使用すると、ネイティブ C++ クラスをラップして、C# またはその他の .NET Framework 言語で作成されたコードからそれらを利用できるようにすることができます。そのためには、ネイティブ DLL コンポーネントまたは COM コンポーネントをラップする C++ コードを記述します。他の .NET Framework 言語とは異なり、Visual C++ には相互運用性サポートが備えられています。これを利用すると、マネージ コードとアンマネージ コードが同じアプリケーション内に、さらには同じファイル内にも共存できるようになります。その後、マネージ アセンブリを生成するスイッチを指定した /clr コンパイラで、C++ コードをビルドします。最後に、アセンブリへの参照を C# プロジェクトに追加し、ラップされたオブジェクトを、その他のマネージ クラスを使用するのと同じように使用します。

COM コンポーネントの C# への公開

COM コンポーネントを C# プロジェクトから使用できます。基本的な手順は次のとおりです。

  1. 使用する COM コンポーネントを探して登録します。regsvr32.exe を使用して登録するか、または COM DLL を登録解除します。

  2. COM コンポーネントへの参照またはタイプ ライブラリをプロジェクトに追加します。

    参照を追加すると、Visual Studio が Tlbimp.exe (タイプ ライブラリ インポーター) を使用し、タイプ ライブラリを入力として受け取って .NET Framework 相互運用アセンブリを出力します。アセンブリ (ランタイム呼び出し可能ラッパー (RCW) とも呼ばれる) には、タイプ ライブラリ内にある COM クラスとインターフェイスをラップするマネージ クラスとインターフェイスが含まれています。Visual Studio は、生成されたアセンブリへの参照をプロジェクトに追加します。

  3. RCW 内で定義されているクラスのインスタンスを作成します。このインスタンスが、COM オブジェクトのインスタンスを作成します。

  4. 他のマネージ オブジェクトを使用するのとまったく同じようにこのオブジェクトを使用します。ガベージ コレクションでオブジェクトが回収されると、COM オブジェクトのインスタンスもメモリから解放されます。

詳細については、「.NET Framework への COM コンポーネントの公開」を参照してください。

C# の COM への公開

COM クライアントは、正しく公開されている C# 型を使用できます。C# 型を公開する基本的な手順は、次のとおりです。

  1. C# プロジェクトに相互運用属性を追加します。

    Visual C# プロジェクトのプロパティを変更して、アセンブリ COM を参照可能にします。詳細については、「[アセンブリ情報] ダイアログ ボックス」を参照してください。

  2. COM タイプ ライブラリを生成し、それを COM 使用のために登録します。

    Visual C# プロジェクトのプロパティを変更して、COM 相互運用用に C# アセンブリを自動的に登録できます。Visual Studio は、/tlb コマンド ライン スイッチを指定して、Regasm.exe (アセンブリ登録ツール) を実行します。これにより、マネージ アセンブリが入力として受け取られ、タイプ ライブラリが生成されます。このタイプ ライブラリは、アセンブリ内の public 型が記述されており、レジストリ エントリを追加して COM クライアントがマネージ クラスを作成できるようにします。

詳細については、「COM への .NET Framework コンポーネントの公開」および「COM クラスの例 (C# プログラミング ガイド)」を参照してください。

参照

概念

C# プログラミング ガイド

その他の技術情報

Improving Interop Performance

Introduction to COM Interop

Marshaling between Managed and Unmanaged Code

アンマネージ コードとの相互運用

高度な COM 相互運用性