我有A.DLL
和B.DLL
使用VS 2010,在A.DLL
项目的C++函数中设置断点,并使用procexp.exe查看当前加载的DLL。显然,A.DLL
已被加载。
我需要从这个函数调用B.DLL
。注意:B.DLL
依赖于A.DLL
库。该库名为A.LIB
使用LoadLibrary
,我执行以下语句:
HANDLE hLib = LoadLibrary("B.DLL");
执行这行代码后,我再次查看procexp.exe发现
A.DLL
被加载了两次!!如果我取消A.LIB
对B.DLL
的依赖,这种情况就不会发生。Process Explorer报告说这两个A.DLL
实例具有不同的基本地址,因此它们确实是不同的模块。我的问题是为什么会加载另一个
A.DLL
?它是否可能意识到A.DLL
已经加载过了?
A.DLL
吗?你确定没有从不同的文件路径加载了两个不同的A.DLL
吗? - Adam RosenfieldLoadLibrary("B.DLL")
时,A.DLL
的第二个实例将被加载。查看B.DLL
的PE导入表。使用dumpbin进行操作。记下用于指定A.DLL
的确切名称。然后对具有对A.DLL
依赖项的主机exe执行相同操作。它是一样的吗?我相信在构建主机exe和B.DLL
时使用了相同的A.LIB
文件。 - David Heffernan