C# の DllImport はランタイム動的パスをサポートしていますか?
C# で DllImport
属性を使用する場合、通常は DLL へのパスを静的に指定する必要があります。ただし、アプリケーションのインストール パスがユーザーに依存する場合 (例: C:UsersuserName...)、絶対パスをハードコーディングするのは現実的ではありません。
伝統的な手法
この問題にもかかわらず、相対パスを使用することをお勧めします。 DLL の名前のみを指定すると、システムはアプリケーション ディレクトリおよびその他の事前定義された場所で DLL を検索します (Windows DLL 読み込みガイドラインに従って)。
SetDllDirectory と P/Invoke
相対パスがニーズに合わない場合は、SetDllDirectory
関数の使用を検討してください。この機能を使用すると、実行時にデフォルトの DLL 検索パスを変更でき、その時点で計算される動的パスを指定できます。
SetDllDirectory
を使用するには、Windows API 関数である P/Invoke を使用する必要があります。そのステートメントは次のとおりです:
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
実績
コードは次のようになります:
<code class="language-csharp">SetDllDirectory(Path.GetTempPath() + "..\myLibFolder"); [DllImport("MyAppDll.dll")] static extern bool MyGreatFunction(int myFirstParam, int mySecondParam);</code>
これにより、システムの標準の検索順序の前に、DLL 検索パスがランタイム フォークを含む場所にリダイレクトされます。
メリット
SetDllDirectory
関数を使用すると、ユーザーのマシンやインストール パスに依存せずに、DLL の実行時の場所を動的に指定できます。
以上が動的 DLL パスは C# の DllImport で使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。