LoadLibrary動態加載dll失敗,GetLastError返回錯誤碼126

問題描述

使用::LoadLibrary(sdkFullPath)動態加載海康dll,加載失敗,GetLastError返回錯誤碼126。html

緣由分析

錯誤碼126表示沒有找到指定模塊,可是::LoadLibrary的參數sdk路徑是正確的。函數

解決方案

最後使用::LoadLibraryEx(sdkFullPath,NULL, LOAD_WITH_ALTERED_SEARCH_PATH),沒有出現錯誤。性能

LoadLibraryEx參數說明

lpLibFileName String,指定要載入的動態連接庫的名稱。採用與CreateProcess函數的lpCommandLine參數指定的一樣的搜索順序spa

hFile Long,未用,設爲零
dwFlags Long,指定下述常數的一個或多個
DONT_RESOLVE_DLL_REFERENCES:不對DLL進行初始化,僅用於NT
LOAD_LIBRARY_AS_DATAFILE:不許備DLL執行。如裝載一個DLL只是爲了訪問它的資源,就能夠改善一部分性能
LOAD_WITH_ALTERED_SEARCH_PATH:指定搜索的路徑

LoadLibrary和LoadLibraryEx的區別

兩個函數的主要區別是LoadLibraryEx多了個參數dwFlags,能夠設定一些動態加載DLL時的選項。
通常來講,LoadLibraryEx加載DLL時並無調用DLL,也就是不會執行DllMain,這樣以來即便DLL自己存在錯誤也會映射成功的。
而LoadLibrary加載時不旦旦映射,還會去調用執行DllMain。
若是確認一個DLL自己不存在問題,但用LoadLibrary加載失敗用LoadLibraryEx加載成功,此時一要看DllMain是否做出了某些限制,二要看DLL自己是否連接了其餘DLL。.net

總結

仍是沒有太搞清楚使用LoadLibrary加載失敗的詳細緣由,感受是依賴的dll文件找不到,使用LoadLibraryEx能夠遍歷子目錄找dll,因此成功了。htm

以後再看看這個問題,先放放,後續弄明白再更新。blog

參考

https://blog.csdn.net/cuglifangzheng/article/details/50580279資源

https://zhidao.baidu.com/question/204625991052212405.htmlget

https://baike.baidu.com/item/LoadLibraryEx/9598009it

相關文章
相關標籤/搜索