首頁 >後端開發 >C++ >動態 DLL 路徑可以與 C# 的 DllImport 一起使用嗎?

動態 DLL 路徑可以與 C# 的 DllImport 一起使用嗎?

Barbara Streisand
Barbara Streisand原創
2025-01-15 20:15:43773瀏覽

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

C# 中的 DllImport 是否支援運行時動態路徑?

在 C# 中使用 DllImport 屬性時,通常需要靜態指定 DLL 的路徑。但是,當應用程式的安裝路徑依賴使用者(例如:C:UsersuserName...)時,硬編碼絕對路徑就不切實際了。

傳統方法

儘管有這個問題,建議使用相對路徑。僅指定 DLL 的名稱,系統會在應用程式目錄和其他預先定義位置(根據 Windows DLL 載入準則)搜尋它。

SetDllDirectory 和 P/Invoke

如果相對路徑不符合您的需求,請考慮使用 SetDllDirectory 函數。此函數可讓您在執行時間修改預設的 DLL 搜尋路徑,從而能夠指定此時計算出的動態路徑。

要使用 SetDllDirectory,您需要使用 P/Invoke,因為它是一個 Windows API 函數。以下是它的聲明:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn