admin管理员组文章数量:1593942
根本原因是在创建“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>
{
保存,重新编译项目。多线程异步调用正常。
本文标签: 报错多线程ATLCatastrophicEUNEXPECTED
版权声明:本文标题:解决 VC2012 ATL 多线程调用 报错:E_UNEXPECTED Catastrophic failure. 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728179550a1148271.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论