我有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