更改靜態連結DLL 的DLL 搜尋路徑
困境:
困境:困境:
兩難到應用程序,它通常在應用程式的目錄中搜尋DLL。但是,在某些情況下,DLL 可能不位於同一目錄中。例如,它可以駐留在指定為「插件」的子資料夾中。
可能的解決方案:
1。動態連結:
考慮使用 LoadLibrary() 和 GetProcAddress() 而不是靜態連結來存取外掛程式的功能。這為從指定位置載入 DLL 提供了更大的靈活性。
2.環境變數修改:
將插件資料夾路徑追加到系統的PATH環境變數中,確保DLL能夠成功定位並載入。
3.延遲載入機制:
採用延遲載入機制來延遲載入外掛功能。實作一個自訂幫助函數,利用提供的路徑載入 DLL。
4.程式集建立:
透過在其中產生 .manifest 檔案將外掛程式資料夾轉換為程式集。將“plugins”資料夾指定為應用程式內的依賴程序集。這將引導 DLL 在插件資料夾中搜尋。
5.存根應用程式和動態載入:
將應用程式細分為存根執行檔和動態載入的元件。在存根可執行檔中,使用 SetDllDirectory 來指示外掛程式資料夾。隨後,呼叫 LoadLibrary,傳遞「appstub.dll」檔案的完整路徑。<assembly manifestVersion="1.0"> <assemblyIdentity type="Win32" name="Plugins" version="1.0.0.0" processorArchitecture="x86" /> <file name="Plugin.dll"/> </assembly>其他提示:
將資料夾轉換為程式集:
#pragma comment(linker, "/manifestdependency:\"name='Plugins' \ processorArchitecture='*' version='1.0.0.0' \ type='win32'\"")要將包含DLL 的目錄轉換為程式集,請將名為「[folder_name].manifest」的檔案加入包含下列內容的資料夾:Pragma Directive對於DLL 載入:在Visual Studio 7 或更高版本中,使用下列pragma 指令指示應用程式從組件而不是本機目錄檢索DLL:
以上是當 DLL 不在應用程式目錄中時,如何更改靜態連結 DLL 的 DLL 搜尋路徑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!