我有 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
被加载两次的原因,所以我继续重组我的代码并想出了一个更好的解决方案。 (最终对我来说效果很好)
我不再使用 B.DLL
对 A.DLL
的库依赖,而是删除了该依赖,而不是使用通过 A 公开的一些可导出函数.LIB
,我为此函数使用了一个函数指针
,并通过调用 LoadLibrary、GetProcAddress 等将其传递下去。
在这样做时,它不会加载 A.DLL
两次,现在一切都很好 :)
关于windows - 使用 LoadLibrary 加载 DLL 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222371/