COM DLL已卸载,锁定计数器仍为非零

时间:2011-12-20 01:25:12

标签: dll com atl

我的程序由VSTS VSinstr工具检测,以便收集覆盖信息。但是在运行我的检测二进制文件时,特别是我的COM dll之一,我的程序一直在出口处崩溃。

我调试以发现崩溃是由以下原因造成的:

  • 首先,我用coLoadLibrary加载我的COM dll(bAutoFree = TRUE)。
  • 我的程序做了一些工作。
  • 来到退出点。
  • 然后,我的COM dll被卸载了。 WINDBG表示使用dwReason == DLL_PROCESS_DETACH调用其DllMain。
  • 执行我的COM dll中的
  • 代码并引发访问冲突(代码c0000005)。令我困惑的是,此时_AtlModule.m_nLockCnt的值仍然等于2!

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为了查询是否可以安全地卸载通过COM API加载的DLL,调用DLL的DllCanUnloadNow。在这里你可以设置一个断点并检查你的COM DLL是否批准卸载(虽然仍然认为忙于一些后台活动)。