有没有办法显式取消隐式链接的 DLL
Is there a way to explicitly detatch an implicitly linked DLL?
这不是用于生产代码,这是用于单元测试。
我们有一个旧版 DLL,它可以释放DLL_PROCESS_DETACH事件的资源。我们在可执行文件的静态销毁阶段遇到了崩溃情况,因为静态变量的析构函数试图访问 DLL 未映射的资源(悬空引用)。
我想在单元测试中重现此崩溃场景,以便证明我已经修复了它。
您可以使用 GetModuleHandle(LPCTSTR lpModuleName)
获取模块的句柄,并将其传递给FreeLibrary()
。
GetModuleHandle()
的文档指出:
GetModuleHandle
函数返回映射模块的句柄,而不增加其引用计数。但是,如果将此句柄传递给FreeLibrary
函数,则映射模块的引用计数将递减。因此,不要将GetModuleHandle
返回的句柄传递给FreeLibrary
函数。这样做可能会导致过早取消映射 DLL 模块。
尽管警告不要这样做,但这听起来正是您想要做的。这应该很容易在你的方案中进行测试,以验证它是否执行你想要的操作。
相关文章:
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- 优化链接的 DLL
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- 不能使用隐式链接.dll中的类
- 显式链接 DLL 和类方法
- 哪种方法更好获取静态链接DLL的模块句柄(HMODULE) - 使用GetModuleHandleEx()或LoadLibrary()?
- 在QtCreator中链接dll的未定义引用错误
- 如何在qt中链接dll
- 在虚幻4插件中链接DLL
- 我们可以动态链接 DLL 的不同方法是什么
- 如果使用LoadLibrary显式链接dll,则列出从PE文件导入的函数
- 静态链接.dll和cmake/qt创建者?
- 当显式动态链接dll时,使用std::unique_lock会破坏XP的兼容性
- 导出:使用c++链接DLL
- 使用xerces链接DLL会给出未定义的符号
- Visual Studio中的链接dll
- 链接DLL时命令行错误
- 如何链接.dll库与c++ VS项目
- 设置显式链接DLL的内部变量
- LNK 2019试图链接DLL和EXE