3

我有A.DLLB.DLL

使用 VS 2010,我在A.DLL项目的 C++ 函数中设置断点,并使用procexp.exe查看当前加载的 DLL。很明显,A.DLL是加载的。

我需要B.DLL从这个函数调用。注意:B.DLLA.DLL. 这个库被称为A.LIB

使用LoadLibrary,我执行以下语句:

HANDLE hLib = LoadLibrary("B.DLL");

执行完这一行后,我再次查看procexp.exeA.DLL加载了两次!!如果我删除对 的A.LIB依赖B.DLL,这将不会发生。Process Explorer 报告这两个实例A.DLL具有不同的基地址,因此它们实际上是不同的模块。

我的问题是为什么这会加载另一个实例A.DLL?它是否有可能实现A.DLL已经加载?

4

1 回答 1

0

所以我无法弄清楚为什么A.DLL要加载两次的原因,所以我继续并重组了我的代码并提出了一个更好的解决方案。(最终对我来说效果很好)

B.DLL我没有对 的库依赖,而是A.DLL删除了该依赖,并且没有使用通过 公开的一些可导出函数A.LIB,而是使用了一个function pointerfor 这个函数,并通过对 LoadLibrary、GetProcAddress 等的调用将其传递下来。

这样做,它不会加载A.DLL两次,现在一切都很好:)

于 2013-04-26T13:40:14.170 回答