使用 DllImport 在 C# 中動態載入 DLL
C# 中的 DllImport
屬性簡化了與本機 DLL 函數的整合。 然而,當 DLL 的位置可能因係統而異時,它對恆定字串路徑的要求就會帶來挑戰。 本文探討了在執行時期動態指定 DLL 路徑的解決方案。
DllImport 相對路徑的挑戰
直接在 DllImport
屬性中使用相對路徑,如下所示:
<code class="language-csharp">[DllImport("myLibFolder\myDLL.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int DLLFunction(int Number1, int Number2);</code>
失敗,因為 DllImport
需要文字字串。這會為部署帶來問題,DLL 的位置可能會改變。
建議方法:利用預設 DLL 搜尋順序
最有效的解決方案是策略性地放置 DLL 並利用 Windows DLL 搜尋順序。此訂單優先考慮以下位置:
PATH
環境變數中列出的目錄。 將 DLL 安裝到應用程式的目錄中可確保在執行時間可靠地找到它。
替代方案:使用 SetDllDirectory 進行動態路徑調整
如果預設搜尋順序不足,SetDllDirectory
函數提供動態解決方案。 此 Win32 函數可讓您在執行時間變更 DLL 搜尋路徑。 這是 P/Invoke 聲明:
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
在第一次 DLL 函數呼叫之前SetDllDirectory
呼叫 ,以暫時將所需目錄新增至搜尋路徑。 這提供了一種靈活的方式來處理不同的 DLL 位置。
以上是如何在C#中動態指定DllImport路徑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!