1

这不适用于生产代码,这是用于单元测试。

我们有一个旧版 DLL,它在 DLL_PROCESS_DETACH 事件上释放资源。我们在可执行文件的静态销毁阶段遇到了崩溃场景,因为静态变量的析构函数试图访问 DLL 未映射的资源(悬空引用)。

我想在单元测试中重现这个崩溃场景,这样我就可以证明我已经修复了它。

4

1 回答 1

2

您可以使用 获取模块的句柄GetModuleHandle(LPCTSTR lpModuleName),并将其传递给FreeLibrary().

状态的文档GetModuleHandle()

GetModuleHandle函数返回一个映射模块的句柄而不增加其引用计数。但是,如果将此句柄传递给FreeLibrary函数,则映射模块的引用计数将递减。因此,不要将返回的句柄传递GetModuleHandleFreeLibrary函数。这样做会导致 DLL 模块过早地被取消映射。

尽管警告要这样做,但这听起来正是您想要做的。这应该很容易在您的场景中进行测试,以验证它是否符合您的要求。

于 2012-08-06T22:57:33.740 回答