首頁 >後端開發 >C++ >當 DLL 不在應用程式目錄中時,如何​​更改靜態連結 DLL 的 DLL 搜尋路徑?

當 DLL 不在應用程式目錄中時,如何​​更改靜態連結 DLL 的 DLL 搜尋路徑?

Barbara Streisand
Barbara Streisand原創
2024-11-03 06:01:30670瀏覽

How to Alter the DLL Search Path for Statically Linked DLLs When the DLL is Not in the Application Directory?

更改靜態連結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中文網其他相關文章!

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