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