windows - 使用 LoadLibrary 加载 DLL 两次

标签 windows winapi

我有 A.DLLB.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.exeA.DLL 被加载了两次!!如果我删除 A.LIBB.DLL 的依赖,就不会发生这种情况。 Process Explorer 报告 A.DLL 的两个实例具有不同的基地址,因此它们实际上是不同的模块。

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

最佳答案

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

我不再使用 B.DLLA.DLL 的库依赖,而是删除了该依赖,而不是使用通过 A 公开的一些可导出函数.LIB,我为此函数使用了一个函数指针,并通过调用 LoadLibrary、GetProcAddress 等将其传递下去。

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

关于windows - 使用 LoadLibrary 加载 DLL 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222371/

相关文章:

c++ - 索引巨大的文本文件

c++ - 在 Windows C++ 中使用具有毫秒精度和分辨率的时间戳记录

windows - 在 Windows 上安装 PyQt5 Designer

python - 导入错误 : cannot import name Thread

windbg - Windows 调试工具未安装

c++ - window 打不开

ruby-on-rails - 命令 : rails console, 生成无法识别。错误:无法识别命令 'rails' 用法:rails COMMAND [ARGS]

c++ - win32 api c++ 中的 Checkbox Checked 问题

winapi - Windows 浏览器控件与 CDHtmlDialog 和 CHtmlView

c++ - 手动替代消息映射?