dll載入問題的解決方法

2021-05-25 08:36:52 字數 1303 閱讀 2046

在使用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...