C# で実行する場合のクロスプラットフォーム DLL インポート パスを指定します
外部 C DLL を C# プロジェクトに統合する場合、静的に定義された値を超えて DLL のインポート パスをカスタマイズするのは困難な場合があります。この記事では、特に実行時のインポート パスの指定に焦点を当てて、この問題について説明します。
DllImport
属性の使用は依然として推奨される方法ですが、DLL ディレクトリで定数文字列引数を使用する必要があり、これが制限となります。この柔軟性は、DLL の場所が異なるユーザー環境間で異なる可能性がある状況では障害となる可能性があります。
相対パスを使用した解決策
一般に信じられていることに反して、DllImport
の物件はまだ利用可能です。絶対パスに依存するのではなく、DLL への相対パスを指定すると問題が解決します。 DLL のデフォルトの検索順序にはアプリケーションのディレクトリが含まれており、インストール中に DLL が確実に見つかるようにします。
SetDllDirectory を使用する
相対パスが機能しない場合、またはパスを動的にカスタマイズする必要がある場合は、SetDllDirectory
関数を使用できます。インポートされた DLL 関数にアクセスする前にこの関数を呼び出すと、デフォルトの DLL 検索パスを変更できます。
SetDllDirectory の P/Invoke ステートメント
SetDllDirectory
を使用するには、次の P/Invoke インポートを実行します:
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
DLL 検索パスは、lpPathName
パラメータを動的に設定することで実行時に調整できます。
以上がC# で実行時にクロスプラットフォーム DLL インポート パスを指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。