正確的載入DLL

2021-08-26 07:39:27 字數 926 閱讀 3791

問題描述:

假定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

正確的載入自己寫的dll

怎麼能讓程式正確的載入自己寫的dll 1 把dll放在程式的debug目錄下,在進行關聯。2 直接把dll放在c windows system目錄下 3 新增環境變數 a,system set path path d mydll b,bool winapi setdlldirctory lpctst...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...