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

我的程序由VSTS VSinstr工具进行检测,以收集覆盖率信息。但是,当运行我的插入指令的二进制文件,特别是我的一个COM dll时,我的程序总是在退出点崩溃

我调试以发现崩溃是由以下原因引起的:

  • 首先,我用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。