您的位置:首页 > 大数据 > 人工智能

解决 VC2012 ATL 多线程调用 报错:E_UNEXPECTED Catastrophic failure.

2016-03-02 17:12 369 查看
根本原因是在创建“ATL简单对象“时,线程模型默认选择的是“单元”。导致子线程异步调用到主线程函数时,报错“E_UNEXPECTED Catastrophic failure.”

修改方案:

将ATL简单对象的线程模型属性设置为“自由”,具体操作如下:

1. 修改 Ukey.rgs 线程模型声明内存模型为“自由”

Ukey.rgs

InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s '<span style="color:#FF0000;">Free</span>'
}


2. 修改Ukey.h 类声明多线程支持

class ATL_NO_VTABLE CUkey :
<span style="color:#FF0000;">public CComObjectRootEx<CComMultiThreadModel></span>,
public CComCoClass<CUkey, &CLSID_Ukey>,
public IDispatchImpl<IUkey, &IID_IUkey, &LIBID_ahdmsUkeyLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IObjectSafetyImpl<CUkey,INTERFACESAFE_FOR_UNTRUSTED_CALLER>
{


保存,重新编译项目。多线程异步调用正常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: