在使用loadlibrary() 和loadlibraryex()載入dll檔案的時候,會產生下面的錯誤:
其中***xx是你所呼叫的dll的檔名。
這類錯誤的問題大概如下:
1.dll路徑錯誤
2. dll中又呼叫了其他dll檔案
注意,使用setcurrentdirectory()設定的當前路徑載入dll檔案時不可靠的。
問題描述:
假定exe呼叫dll,dll內部又呼叫dll1。
dll和dll1與exe不在同一目錄下,而是位於乙個單獨的目錄dlldir下。
現象:
loadlibrary(l"dll"); 載入失敗①。
loadlibrary(l"dll絕對路徑"); 載入失敗②。
失敗原因:
失敗①好理解,失敗②是因為雖然指定了dll絕對路徑作為loadlibrary的引數,但是該引數卻無法對dll內部呼叫的dll1起作用(如果把dll1扔到exe同級目錄下,則可以成功載入),因此無法載入的實際上是dll1。
解決方案:
①loadlibraryex:
loadlibraryex("dll絕對路徑",null, load_with_altered_search_path);
通過指定load_with_altered_search_path,讓系統dll搜尋順序從dll所在目錄開始。
②設定當前目錄:
wchar_t szcurrentdir[max_path] = ;
::getcurrentdirectory(max_path, szcurrentdir);
::setcurrentdirectory(strmodulepath);
hmodule hconvertor = loadlibrary(l"dll絕對路徑");
::setcurrentdirectory(szcurrentdir);
③setdlldirectory:
setdlldirectory(l"dll絕對路徑");
loadlibray(l"dll絕對路徑");
setdlldirectory(null); //recover
裡面用到的process monitor除錯非常有用。
dll版本衝突的解決方法
當執行站點或者控制台等程式時,如果專案引用的dll版本與其它dll所依賴的dll版本不一致,就會報未能引導程式集的錯誤。錯誤資訊為 未能載入檔案或程式集 newtonsoft.json,version 4.5.0.0,culture neutral,publickeytoken 30ad4fe6b2...
缺少dll檔案的解決方法
1.什麼是dll檔案從專業的角度來說,dll檔案,即動態連線庫,是一種不可執行的二進位制檔案,它允許程式共享執行特殊任務所必需的 和其他資源。打個比方,相當於你去飯店吃飯,隻人帶上錢或卡就可以了,不用把盤子 碗和筷子都帶上,在這裡電腦就是飯店,它提供了dll檔案 相當於盤子 碗和筷子 其他程式 顧客...
Qt exe程式缺少dll的解決方法
當我們用qt creator直接執行程式時是可以的,但當我們直接開啟工程目錄下的exe檔案卻發現執行不了,提示缺少dll檔案,因為qt預設是動態編譯的,需要dll才能執行。當我們用creator執行程式的時候qt當然會去找相應的dll,但直接開啟exe檔案的時候windows會在環境變數目錄和exe...