問題描述
使用::LoadLibrary(sdkFullPath)動態加載海康dll,加載失敗,GetLastError返回錯誤碼126。html
緣由分析
錯誤碼126表示沒有找到指定模塊,可是::LoadLibrary的參數sdk路徑是正確的。函數
解決方案
最後使用::LoadLibraryEx(sdkFullPath,NULL, LOAD_WITH_ALTERED_SEARCH_PATH),沒有出現錯誤。性能
LoadLibraryEx參數說明
lpLibFileName String,指定要載入的動態連接庫的名稱。採用與CreateProcess函數的lpCommandLine參數指定的一樣的搜索順序spa
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