• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > com中如何处理错误?

com中如何处理错误?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了distributedcom错误,com加载项错误,com错误,storebt.com错误,laosege.com访问错误等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: com中如何处理错误?
描述:

这是一个很典型的问题,在论坛中居然没找到有效解答。
还请指教


解决方案1:

以下转载至csdn
==========================================
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());
=============================================
另外,想说说个人的想法。
在atl中通常是CComCoClass::Error来处理错误的,在最开始使用atl向导创建组件时,在向导第一个选项卡中选上Support ISupportErrorInfo.该选项提供ISupportErrorInfo接口的实现
atl向导生成的代码提供了组件中创建错误信息的代码,同时,它在客户端不用做任何事情,只需调用
CComCoClass::Error就行了。
在客户端检查错误
HRESULT hr = CallComMethod();
if(FAILED(hr))
{
   //这里处理错误。
}

解决方案2:

_com_error


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 写了一个简单的基于MFCDLL的COM,发生错误,回复有分!
  • 用COM编程为什么那么容易出错误
  • com+严重错误!高手请进!
  • COM运行时错误
  • COM连接错误,不知道怎么解决,请帮忙
  • 错误求助:COM/OPCerror0×800401540onCoCreateInStanceEx
  • com中如何处理错误?

相关文章

  • 2017-06-05 定时读取缓存区的数据
  • 2017-06-05 关于DLL再调用另一个DLL的极难问题
  • 2017-06-05 大家给点帮助,说说自己对‘线程’的理解。集思广益。
  • 2017-06-04 求救!!!!系统服务
  • 2017-06-05 rundll32exe的问题,高手指点,100分送
  • 2017-06-05 请问如何调试一个进程外组件?谢谢
  • 2017-06-05 请问:怎么在win32API的DLL里创建一个属性页?
  • 2017-06-04 关于ActiveX控件的打包与发布高分求教
  • 2017-06-04 这个问题很难吗?为什么一直没人搞得定?
  • 2017-06-05 FF(火狐)浏览器插件开发问题?NPAPI开发的。

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何卸载一个EXE中的COM对象
    • 一个关于dll的问题,各位都来看看,up者有分。<在线等待>
    • 想学COM+编程该看什么书?
    • 如何通过进程名得到进程句柄
    • ●●●●●●●●●●●●-意外地调用了方法或属性访问
    • 怎样确定鼠标点击的位置,位于WORD文档的那一页?
    • VC水晶报表求助
    • 串口通信,比如接收6个字节,会触发两次,第一次接收6个字节,第二次接收0个字节
    • com中创建ocx对象失败
    • 关于调用一个全局变量的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有