私は実際にどのように機能するかを理解するのが好きDllImport
です。平易な英語の説明が必要です - 簡単な説明を意味します。
「インクルード ファイル」ディレクティブ/スタティック ライブラリのように、DLL からエクスポートされたメソッドと静的にリンクしますか?
それとも、C# プログラムの実行ポイントに到達したときに、DLL からメソッドを動的に呼び出しますか?
2 つのコア winapi 関数を使用します。1 つ目は、DLL をプロセスにロードする winapi 関数である LoadLibrary() です。DLL に指定した名前が使用されます。2 つ目は GetProcAddress() で、DLL 内の関数のアドレスを返す winapi 関数です。指定した関数の名前を使用します。次に、指定した引数を使用して関数呼び出し用のスタック フレームを構築するいくつかの配管実行が実行され、見つかったアドレスで関数が呼び出されます。
そうです、これは非常にダイナミックです。これは、ピンボークされた関数を呼び出すステートメントにコードが実際に到達するまで発生しません。この技術用語は、ネイティブ コードの Windows ローダーで使用されるより一般的な早期バインディングとは対照的に、"遅延バインディング" です。
動的に呼び出します。DLLimport は、コンパイルされたプログラムに何も埋め込みません。そのため、DLLImport を使用するときは、エンド ユーザーが正しい DLL を正しい場所に持っていることを確認することが重要です。そうしないと、プログラムが動作しません。
後者-存在しないdll名を指定することで、それを確信できます。もちろん、コンパイルして実行することはできますが、関数を呼び出すことはできません。