这不适用于生产代码,这是用于单元测试。
我们有一个旧版 DLL,它在 DLL_PROCESS_DETACH 事件上释放资源。我们在可执行文件的静态销毁阶段遇到了崩溃场景,因为静态变量的析构函数试图访问 DLL 未映射的资源(悬空引用)。
我想在单元测试中重现这个崩溃场景,这样我就可以证明我已经修复了它。
这不适用于生产代码,这是用于单元测试。
我们有一个旧版 DLL,它在 DLL_PROCESS_DETACH 事件上释放资源。我们在可执行文件的静态销毁阶段遇到了崩溃场景,因为静态变量的析构函数试图访问 DLL 未映射的资源(悬空引用)。
我想在单元测试中重现这个崩溃场景,这样我就可以证明我已经修复了它。
您可以使用 获取模块的句柄GetModuleHandle(LPCTSTR lpModuleName)
,并将其传递给FreeLibrary()
.
状态的文档GetModuleHandle()
:
该
GetModuleHandle
函数返回一个映射模块的句柄而不增加其引用计数。但是,如果将此句柄传递给FreeLibrary
函数,则映射模块的引用计数将递减。因此,不要将返回的句柄传递GetModuleHandle
给FreeLibrary
函数。这样做会导致 DLL 模块过早地被取消映射。
尽管警告不要这样做,但这听起来正是您想要做的。这应该很容易在您的场景中进行测试,以验证它是否符合您的要求。