S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

VC COM组件中发出COM错误

Posted on 2009-09-01 11:14 S.l.e!ep.¢% 阅读(364) 评论(0)  编辑 收藏 引用 所属分类: COM
先要实现ISupportErrorInfo,然后再你要抛出异常的地方SetErrorInfo
CComPtr<ICreateErrorInfo> pcei;
HRESULT hr=CreateErrorInfo(&pcei);
ATLASSERT(SUCCEEDED(hr));
hr=pcei->SetDescription(OLESTR("THIS IS A CUSTOM EXCEPTION."));
CComPtr<IErrorInfo> pei;
hr=pcei->QueryInterface(IID_IErrorInfo,(void**)&pei);
ATLASSERT(SUCCEEDED(hr));
hr=SetErrorInfo(0,pei);
ATLASSERT(SUCCEEDED(hr));
return E_FAIL;

在抛出异常后必须返回表示失败的HRESULT,不然VB不会捕捉异常
---------------------------------------------------------------

如果在创建接口的时候属性里面没有选support IErrorInfo的话,VB不会捕捉异常


实际测试中,以上方法不会抛出异常(我的Project是ATL)

在 ATL 中,
return AtlReportError(CLSID_UDPSocketObj, "Error   Information!", IID_IUDPSocketObj, 0);

即可抛出异常


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理