C# では、DllImport 属性を使用して、アンマネージ DLL からマネージド C# コードに関数をインポートします。通常、この属性のパス パラメーターは DLL へのフル パスを指定します。ただし、ユーザーのフォルダー パスが異なるクロスプラットフォーム インストールの課題に直面した場合、固定パスを指定するのは現実的ではありません。
この問題を解決するには、Path.GetTempPath() メソッドを利用して、現在のユーザー プロファイルの一時フォルダー パスを動的に決定するという代替方法があります。そこから、ユーザーのローカル アプリケーション データ フォルダーに移動し、目的の DLL サブフォルダーに進むことができます。
ただし、DllImport トレイトは const 文字列パラメーターを予期しているため、実行時のパス構築に障害が生じます。
推奨される方法は、DllImport 機能を引き続き使用することです。解決策は、指定された DLL の検索順序を制御するネイティブ Win32 DLL 読み込みルールを理解することです。
DllImport 属性の相対パスを使用することにより、システムはアプリケーションのロード ディレクトリを優先して DLL を検索します。これにより、インストール フォルダー パスが異なっていても、確実に正常に実行されます。
絶対パス指定が必要な場合は、SetDllDirectory 関数を使用できます。この関数はデフォルトの検索パスを変更し、実行時の計算に基づいて動的な値を使用できるようにします。インポートされた DLL 関数を呼び出す前にこの関数を呼び出すと、変更された検索パスが有効になります。
以上がC# で DllImport パスを動的に指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。