c++ - CComPtrBase::~CComPtrBase 在解除分配智能指针时崩溃

标签 c++ visual-c++ com mfc

最近,我们发现在我们的客户站点升级到 Windows Server 2008R2 后,与 COM 相关的崩溃显着增加。最初我们认为这可能是由于 COM 引用计数问题造成的,但在通过代码进一步调查后,我们排除了这种可能性。我们正在考虑的另一个角度是,COM 库是否可能由于此问题而未初始化?在调查代码后,我们再次排除了它。截至目前,我们还没有任何具体的答案。

在迁移到 64 位后,是否有任何已知的 COM 崩溃事件增加?

以下是崩溃指纹。我在这篇文章中保持简洁。

崩溃 1:

0:000> 韩元 2

#ChildEBP 返回地址

00 0033e9d8 662051d5 pvformscom!ATL::CComPtrBase::~CComPtrBase(void)+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]

01 0033ea00 66210586 pvformscom!COrder::~COrder(void)+0xa6 [c:\2012.01_svc_dep\cpp\pvformscom\order.cpp @ 149]

0:000> .frame 00

00 0033e9d8 662051d5 pvformscom!ATL::CComPtrBase::~CComPtrBase+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]

0:000> dt 这个

本地 var @ecx 类型 ATL::CComPtrBase*

{ 00000001 } +0x000 p : 0x00000001 I日历

崩溃 2:

0:000> 韩元 2

#ChildEBP 返回地址

00 0016e6d8 646052a9 pvformscom!ATL::CComPtrBase::~CComPtrBase(void)+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]

01 0016e700 646106ae pvformscom!COrder::~COrder(void)+0x6f [c:\2012.01_svc_dep\cpp\pvformscom\order.cpp @ 152]

0:000> .frame 00

00 0016e6d8 646052a9 pvformscom!ATL::CComPtrBase::~CComPtrBase+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]

0:000> dt 这个

本地 var @ecx 类型 ATL::CComPtrBase*

{ 00000001 } +0x000 p : 0x00000001 II免疫

崩溃 3:

0:000> 韩元 2

#ChildEBP 返回地址

00 0032f008 6193f444 pvformscom!ATL::CComPtrBase::~CComPtrBase(void)+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]

01 0032f038 6194d2a7 pvformscom!CClinicalEvent::~CClinicalEvent(void)+0x2df [c:\2012.01_svc_dep\cpp\pvformscom\clinicalevent.cpp @ 170]

0:000> .frame 00

00 0032f008 6193f444 pvformscom!ATL::CComPtrBase::~CComPtrBase+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]

0:000> dt 这个

本地 var @ecx 类型 ATL::CComPtrBase*

{ 00000001 } +0x000 p : 0x00000001 IPVCollection

非常感谢任何帮助。

注意:我们在我们的类中使用一些智能指针作为成员变量。

谢谢,

最佳答案

如果您在 ::CoUninitialize() 之后调用 Release() 这将是 这种行为。

关于c++ - CComPtrBase::~CComPtrBase 在解除分配智能指针时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29471520/

相关文章:

C++比较器复杂情况传参问题

c++ - dlldata.c不是在win32下生成的?

C++ 运算符优先级 =、* 和++

c++ - 基于指针的基本随机访问迭代器的代码?

c++ - Eclipse CDT 提示 Unresolved 功能,但仍然成功构建

c++ - 谁取得 IErrorInfo 的所有权?

visual-studio - 在 Visual Studio 中恢复对 UI 的更改

c++ - 使用 ref-qualifiers 重载解析模板方法

c++ - C/C++ 中的 CreateObject 等价物? (COM 互操作)

windows - 查找所有可用的 OLE 容器