次の方法で共有


アンマネージ DLL 関数の使用

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

このセクションでは、アンマネージ DLL 関数の使用に関連するタスクについて説明し、プラットフォーム呼び出しの詳細について説明します。 次のタスクに加えて、一般的な考慮事項と、追加情報と例を提供するリンクがあります。

エクスポートされた DLL 関数を使用するには

  1. DLL 内の関数を識別します

    最低限、関数の名前と関数を含む DLL の名前を指定する必要があります。

  2. DLL 関数を保持するクラスを作成します

    既存のクラスを使用したり、アンマネージ関数ごとに個別のクラスを作成したり、関連する一連のアンマネージ関数を含むクラスを 1 つ作成したりできます。

  3. マネージド コードでプロトタイプを作成します

    [Visual Basic]Function キーワードと Lib キーワードで Declare ステートメントを使用します。 まれに、共有関数キーワードで DllImportAttribute を使用できます。 これらのケースについては、このセクションの後半で説明します。

    [C#]DLL と関数を識別するには、 DllImportAttribute を使用します。 メソッドを静的修飾子と extern 修飾子でマークします。

    [C++]DLL と関数を識別するには、 DllImportAttribute を使用します。 ラッパー メソッドまたは関数を extern "C" でマークします。

  4. DLL 関数を呼び出します

    他のマネージド メソッドと同様に、マネージド クラスでメソッドを呼び出します。 構造体の受け渡 しと コールバック関数の実装 は特殊なケースです。

構築方法を示す例を示します。プラットフォーム呼び出しで使用する NET ベースの宣言については、「プラットフォーム呼び出し を使用したデータのマーシャリング」を参照してください。

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

プラットフォーム呼び出しは、メタデータに依存してエクスポートされた関数を検索し、実行時にその引数をマーシャリングします。 次に、このプロセスの図を示します。

プラットフォーム呼び出し呼び出しを示す図。

プラットフォーム呼び出しでアンマネージ関数が呼び出されると、次の一連のアクションが実行されます。

  1. 関数を含む DLL を検索します。

  2. DLL をメモリに読み込みます。

  3. メモリ内の関数のアドレスを検索し、その引数をスタックにプッシュし、必要に応じてデータをマーシャリングします。

    DLL の検索と読み込み、メモリ内の関数のアドレスの検索は、関数の最初の呼び出しでのみ発生します。

  4. アンマネージ関数に制御を転送します。

プラットフォーム呼び出しでは、アンマネージ関数によって生成された例外がマネージド呼び出し元にスローされます。

こちらも参照ください