COM异常处理实现方法总结
来源:互联网 发布:极速网络下载 编辑:程序博客网 时间:2024/06/06 14:47
一、服务器端的实现
COM 是靠各种各样的接口来提供服务的,ISupportErrorInfo接口能够提供更丰富的错误信息报告。下面这段代码是使用 ISupportErrorInfo 的一般方法:
STDMETHODIMP Cxxx::fun(){... ... ... ...CComQIPtr< ICreateErrorInfo> spCEI;::CreateErrorInfo( &spCEI );spCEI->SetGUID( IID_Ixxx );// 发生错误的接口IIDspCEI->SetSource( L"xxx.xxx" );// ProgID// 如果你的组件同时提供了帮助文件,那么就可以:spCEI->SetHelpContext( 0 );// 设置帮助文件的主题号spCEI->SetHelpFile( L"xxx.hlp" );// 设置帮助文件的文件名spCEI->SetDescription( L"错误描述信息" );CComQIPtr < IErrorInfo > spErrInfo = spCEI;if( spErrInfo ) ::SetErrorInfo( 0, spErrInfo );// 这时调用者就可以得到错误信息了return E_FAIL;}
上面是原理性代码,在我们实际开发程序中,我们可以非常简单的改写为:
STDMETHODIMP Cxxx::fun(){... ... ... ...return Error( L"错误描述信息" ); //调用CComCoClass::Error函数}
二、客户端接收组件的错误信息1、使用 API 查询错误接口:HRESULT hr = spXXX->fun()// 调用组件功能if( FAILED( hr ) )// 如果发生了错误{CComQIPtr < ISupportErrorInfo > spSEI = spXXX;// 组件是否提供了 ISupportErrorInfo 接口?if( spSEI )// 如果支持,那么{hr = spSEI->InterfaceSupportsErrorInfo( IID_Ixxx );// 是否支持 Ixxx 接口的错误处理?if( SUCCEEDED( hr ) ){// 支持,太好了。取出错误信息CComQIPtr < IErrorInfo > spErrInfo;// 声明 IErrorInfo 接口hr = ::GetErrorInfo( 0, &spErrInfo );// 取得接口if( SUCCEEDED( hr ) ){CComBSTR bstrDes;spErrInfo->GetDescription( &bstrDes );// 取得错误描述......// 还可以取得其它的信息}}}}2、如果使用 #import 等包装方式调用组件,接收错误的方法是:try{......// 调用组件功能}catch( _com_error &e ){e.Description();// 取得错误描述信息......// 还可以调用 _com_error 函数取得其它信息}
- COM异常处理实现方法总结
- Perl异常处理方法总结
- R语言异常值处理方法总结
- Spring 中异常处理方法的总结
- Java中异常处理方法总结
- 总结项目中常见的异常,及处理方法
- java的方法、重构,调试、异常处理机制总结
- 错误异常处理总结
- Java异常处理总结
- Java异常处理总结
- 异常处理总结
- Java异常处理总结
- C++异常处理总结
- ORACLE异常处理总结
- Java异常处理总结
- java 异常处理总结
- Java异常处理总结
- struts2 异常处理总结
- Qt 简介
- 无聊的培训第三天了
- GridView导出成EXCEL的代码
- 匆忙的项目
- 14 个经典的Javascript代码
- COM异常处理实现方法总结
- 无聊的培训考试了
- cc的基本用法[转贴]
- C++中extern “C”含义深层探索 zz
- 听陈一舟,俞敏洪说那过去的事情……
- 终于找到了在博客公社的BLOG
- SQL Server 2000 之存储过程解密
- 35岁之前成功的12条黄金法则
- 软件需求—“必需的”&“更好的”