COM的错误处理 (转)

COM的错误处理 (转)[@more@]

 COM的错误处理
黄森堂(vcmfc)茁著

  本人的文采很差,只能从较实在的角度出发了。

  在这里我主要提COM的原始处理方法与ATL提供的处理方法,至于MFC,可能也就差不多了。

1.COM的原始处理方式:

  由于COM是与语言的无关性,COM提供了返回码HRESULT,HRESULT定义为一个简单的长整形,即一个32位的值,它由3部分组成:用途、严重性、状态码.microsoft提供了一些有用的宏定义来辅助操作,其中MAKE_HRESULT是用来将用途、严重性、状态码组合成HRRESULT值,其参数请参考MSDN。但由于在高级语句中HRESULT不能很多地工作,因为这些语句将HRESULT值隐藏起来,在这些语句中,错误是作为异常而不是返回码来进行处理。当在这些语句中进行编程时,它提供的错误信息太少了,为了克服这一陷,COM提供了IErrorInfo,ICreateError和ISupportErrorInof接口,在ATL object Wizard的属性中Attribute的Support ISupportErrorInfo打钩就可以了,然后在你的程序中需要返回错误信息的地方加入以下代码:
ICreateErrorInfo *pErrorInfo=NULL;
CreateErrorInfo(&pErrorInfo);
pErrorInfo->SetGUID(IID_IEncrypt);//你的组件对象的GUID
pErrorInfo->Setsource(L"ASPEncrypt.Encrypt");
pErrorInfo->SetDescription(A2W((char*)szErrorText));//出错说明信息
IErrorInfo *pErrInfo=NULL;
//第一个参数一定是IID_IErrorInfo,不是你的GUID,不乱写。
pErrorInfo->QueryInterface(IID_IErrorInfo,(void**)&pErrInfo);
SetErrorInfo(0,pErrInfo);
pErrInfo->Release();
pErrorInfo->Release();
//::GetLastError();可换成你的错误ID;
return MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,::GetLastError());

2.ATL提供的错误处理方式:

  ATL可真是简单之极,它把上面的全包装起来,就是使用CComCoClass::Error就可以了,如下:
// return Error(A2W((char*)szErrorText),IID_IEncrypt,::GetLastError());

还有问题吗?嘿嘿~~,本人的得到陆谊edyang的大力帮助及指点的,高手莫笑!。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10790690/viewspace-951292/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10790690/viewspace-951292/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值