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