我有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
的{{1}}依赖关系,则不会发生这种情况。 Process Explorer报告B.DLL
的两个实例具有不同的基址,因此它们实际上是不同的模块。
我的问题是为什么会加载A.DLL
的另一个实例?是否有可能实现A.DLL
已经加载?
答案 0 :(得分:0)
所以我无法弄清楚为什么A.DLL
被加载两次背后的原因,所以我继续重构我的代码并提出了一个更好的解决方案。 (最终为我工作正常)
我没有B.DLL
对A.DLL
库依赖,而是删除了该依赖项,而不是通过A.LIB
公开了一些可导出的函数,我使用了function pointer
对于此函数,并通过调用LoadLibrary,GetProcAddress等传递它。
这样做,它不会加载A.DLL
两次,现在一切都很好:)