DLL使用LoadLibrary加载两次

时间:2013-04-25 18:45:10

标签: windows winapi

我有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.exe A.DLL加载两次!!如果我删除对A.LIB的{​​{1}}依赖关系,则不会发生这种情况。 Process Explorer报告B.DLL的两个实例具有不同的基址,因此它们实际上是不同的模块。

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

1 个答案:

答案 0 :(得分:0)

所以我无法弄清楚为什么A.DLL被加载两次背后的原因,所以我继续重构我的代码并提出了一个更好的解决方案。 (最终为我工作正常)

我没有B.DLLA.DLL库依赖,而是删除了该依赖项,而不是通过A.LIB公开了一些可导出的函数,我使用了function pointer对于此函数,并通过调用LoadLibrary,GetProcAddress等传递它。

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