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

来源:互联网 发布:js点击 编辑:程序博客网 时间:2024/04/29 11:43


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


修改方案:

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


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

Ukey.rgsInprocServer32 = 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>{

保存,重新编译项目。多线程异步调用正常。

0 0