ホームページ >バックエンド開発 >C++ >動的 DLL パスは C# の DllImport で使用できますか?

動的 DLL パスは C# の DllImport で使用できますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-15 20:15:43772ブラウズ

Can Dynamic DLL Paths Be Used with C#'s DllImport?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。