COM DLL已卸载,锁计数器仍然为非零
我的程序由VSTS VSinstr工具进行检测,以收集覆盖率信息。但是,当运行我的插入指令的二进制文件,特别是我的一个COM dll时,我的程序总是在退出点崩溃 我调试以发现崩溃是由以下原因引起的:COM DLL已卸载,锁计数器仍然为非零,dll,com,atl,Dll,Com,Atl,我的程序由VSTS VSinstr工具进行检测,以收集覆盖率信息。但是,当运行我的插入指令的二进制文件,特别是我的一个COM dll时,我的程序总是在退出点崩溃 我调试以发现崩溃是由以下原因引起的: 首先,我用coLoadLibrary加载COM dll(bAutoFree=TRUE) 我的程序做了一些工作 来到出口点 然后,我的COM dll被卸载。WINDBG表示使用dwReason==DLL\u进程\u分离调用its DllMain 执行my COM dll中的代码并引发访问冲突(代码c
- 首先,我用coLoadLibrary加载COM dll(bAutoFree=TRUE)
- 我的程序做了一些工作
- 来到出口点
- 然后,我的COM dll被卸载。WINDBG表示使用dwReason==DLL\u进程\u分离调用its DllMain
- 执行my COM dll中的代码并引发访问冲突(代码c0000005)。让我困惑的是,此时,_AtlModule.m_nLockCnt的值仍然等于2李>
有什么想法吗?为了查询卸载通过COM API加载的DLL是否安全,需要调用DLL。在这里,您可以设置断点,并检查COM DLL是否批准卸载(同时仍在忙于某些后台活动)。为什么要调用CoLoadLibrary而不是CoCreateInstance?您正在调用cofreebrary吗?我想这只是因为在进程即将终止时应该卸载dll,即使它的锁计数器不等于0。