我有A.DLL
和B.DLL
DLL加載兩次使用調用LoadLibrary
使用VS 2010,我設置C++函數斷點在A.DLL
項目並使用procexp.exe看到當前加載的DLL什麼。顯然,加載了A.DLL
。
我需要從這個函數調用B.DLL
。注意:B.DLL
對A.DLL
有依賴庫。這個庫被稱爲A.LIB
使用LoadLibrary
,我執行語句:
HANDLE hLib = LoadLibrary("B.DLL");
執行完這條線,我看procexp.exe一次。 A.DLL
被加載兩次!如果我刪除對B.DLL
的A.LIB
依賴項,則不會發生。 Process Explorer報告A.DLL
的兩個實例具有不同的基址,因此它們確實是不同的模塊。
我的問題是爲什麼這會加載A.DLL
的另一個實例?是否有可能實現A.DLL
已經加載?
他們是在同一* *'A.DLL'?你確定你沒有從不同的文件路徑加載兩個不同的'A.DLL'嗎? – 2013-04-25 18:47:31
procexp顯示它們來自相同的文件路徑,相同的版本和相同的時間戳。由於某種原因,它實際上創建了相同的DLL兩次 – ryrich 2013-04-25 18:48:56
當您調用LoadLibrary(「B.DLL」)時,加載'A.DLL'的第二個實例''查看'B.DLL'的PE導入表。爲此使用dumpbin。記下用於指定'A.DLL'的確切名稱。然後對具有依賴於'A.DLL'的主機exe執行相同的操作。它是一樣的嗎?我相信你在生成主機exe和'B.DLL'時使用相同的'A.LIB'文件。 – 2013-04-25 19:03:22