LoadLibrary與LoadLibraryEx


參考了這個博客:https://blog.csdn.net/cuglifangzheng/article/details/50580279

以及這個博客:https://blog.csdn.net/zhangbohh8662/article/details/47026519

若DLL不在調用方的同一目錄下,可以用LoadLibrary(L”DLL絕對路徑”)加載。
但若被調DLL內部又調用另外一個DLL,此時調用仍會失敗。解決辦法是用LoadLibraryEx:
LoadLibraryEx(“DLL絕對路徑”, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通過指定LOAD_WITH_ALTERED_SEARCH_PATH,讓系統DLL搜索順序從DLL所在目錄開始。

跨目錄調用dll,你應該這樣
1 用GetCurrentDir保存當前的工作目錄
2 用SetCurrentDir將當前的工作目錄,設置為你的DLL所在的路徑,需要使用絕對路徑
3 用LoadLibrary你的DLL
4 使用SetCurrentDir恢復到原來的工作路徑

 

上面的方法不行的話, 試下:

若DLL不在調用方的同一目錄下,可以用LoadLibrary(L"DLL絕對路徑")加載。但若調用的DLL內部又調用另外一個DLL,此時調用仍會失敗。解決辦法是用LoadLibraryEx:
LoadLibraryEx("DLL絕對路徑", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通過指定LOAD_WITH_ALTERED_SEARCH_PATH,讓系統DLL搜索順序從DLL所在目錄開始,這種方法會強制加載當前DLL關聯的同目錄下的其他dll,可以避免系統錄像下的dll的影響。 比如: LoadLibraryEx(A.dll, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);A.dll又依賴同目錄下的B.dll,如果系統目錄下也存在B.dll,則通過LoadLibraryEx可以避免加載到系統目錄下的B.dll。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM