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