アンマネージ DLL 関数の処理
プラットフォーム呼び出しは、マネージド コードがダイナミック リンク ライブラリ (DLL) に実装されたアンマネージド関数 (Windows API に含まれているものなど) を呼び出すことを可能にするサービスです。 これはエクスポートされた関数を見つけて呼び出し、必要に応じて相互運用の境界を越えて、その引数 (整数、文字列、配列、構造体、その他) をマーシャリングします。
このセクションでは、アンマネージド DLL 関数の使用に関連するタスクを紹介し、プラットフォーム呼び出しについての詳しい情報を提供します。 以下のタスクに加えて、一般的な考慮事項、および追加情報や例を提供するリンクがあります。
エクスポートされた DLL 関数を使用するには
-
少なくとも、関数の名前とそれを含んでいる DLL の名前を指定する必要があります。
-
既存のクラスを使用して、アンマネージ関数ごとに個別のクラスを作成するか、または関連するアンマネージ関数のセットを格納する 1 つのクラスを作成できます。
-
[Visual Basic] Declare ステートメントを Function および Lib キーワードと共に使用します。 いくつかのまれなケースでは、DllImportAttribute を Shared Function キーワードと共に使用できます。 それらのケースについては、このセクションで後述します。
[C#] DllImportAttribute を使用して DLL と関数を指定します。 メソッドを static および extern 修飾子でマークします。
[C++] DllImportAttribute を使用して DLL と関数を指定します。 ラッパー メソッドまたは関数を extern "C" でマークします。
-
他のマネージド メソッドと同様の方法で、マネージド クラスのメソッドを呼び出します。 構造体の受け渡しおよびコールバック関数の実装は、特殊なケースです。
プラットフォーム呼び出しで使用する .NET ベースの宣言を作成する方法を示す例については、「プラットフォーム呼び出しによるデータのマーシャリング」を参照してください。
プラットフォーム呼び出しの詳細
プラットフォーム呼び出しは、エクスポート関数を検索して、その引数を実行時にマーシャリングするために、メタデータに依存します。 次に、このプロセスの図を示します。
プラットフォーム呼び出しがアンマネージ関数を呼び出すと、以下の一連のアクションが実行されます。
関数を含む DLL を検索します。
DLL をメモリに読み込みます。
メモリ内の関数のアドレスを検索し、その引数をスタックにプッシュし、必要に応じてデータをマーシャリングします。
Note
DLL の検索と読み込み、およびメモリ内の関数のアドレスの検索は、その関数を初めて呼び出したときにのみ生じます。
アンマネージ関数に制御を移します。
プラットフォーム呼び出しは、アンマネージド 関数によって生成された例外を、マネージド呼び出し元にスローします。
関連項目
.NET