アンマネージ DLL 関数の処理

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

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

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

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

    少なくとも、関数の名前とそれを含んでいる DLL の名前を指定する必要があります。

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

    既存のクラスを使用して、アンマネージ関数ごとに個別のクラスを作成するか、または関連するアンマネージ関数のセットを格納する 1 つのクラスを作成できます。

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

    [Visual Basic] Declare ステートメントを Function および Lib キーワードと共に使用します。 いくつかのまれなケースでは、DllImportAttributeShared Function キーワードと共に使用できます。 それらのケースについては、このセクションで後述します。

    [C#] DllImportAttribute を使用して DLL と関数を指定します。 メソッドを static および extern 修飾子でマークします。

    [C++] DllImportAttribute を使用して DLL と関数を指定します。 ラッパー メソッドまたは関数を extern "C" でマークします。

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

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

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

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

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

Diagram that shows a platform invoke call.

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

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

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

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

    Note

    DLL の検索と読み込み、およびメモリ内の関数のアドレスの検索は、その関数を初めて呼び出したときにのみ生じます。

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

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

関連項目