CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

COM的烦恼!

楼主willyhan()2001-11-02 09:59:22 在 VC/MFC / ATL/ActiveX/COM 提问

最近一直在专功COM,但心中却对COM编程存在着许多的忧虑。在许多COM书中都会看到一些如:这样做非常危险!的话。总之感觉如果刚开始COM编程,那前面如同一片雷区一样!  
  可是在学C++、VC时,他们都有很好的容错功能,从没有过上面的感觉。  
  各位学习和使用COM编程的朋友们,你们说说,这是不是微软设计的COM还不成熟? 问题点数:50、回复次数:4Top

1 楼musicdancer(饭盆)回复于 2001-11-02 15:46:06 得分 0

能否举个c++或vc容错功能的例子.  
  Top

2 楼willyhan()回复于 2001-11-02 21:29:05 得分 0

编译器对一些COM用法无法检查出错误,只能记住不能这么用。Top

3 楼musicdancer(饭盆)回复于 2001-11-03 12:03:29 得分 40

编译器是c++编译器,又不是com编译器,com不是语言.  
  只要你语法不错误,编译器才不管你应用逻辑上的错误.  
  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());  
   
  vc中还提供_com_error用来处理com错误.  
  Top

4 楼wyzegg(蛋)回复于 2001-11-03 12:06:26 得分 10

COM本来就是个严格的规范Top

相关问题

  • 烦恼
  • 恼烦恼烦恼烦恼烦恼烦恼烦恼
  • Vcl的烦恼!!!!
  • Rose2002的烦恼。
  • ''的烦恼~~~~~~~~~
  • 就业烦恼
  • 菜鸟的烦恼
  • 编程的烦恼
  • 继承的烦恼!!!!!!!!!!
  • 自学的烦恼

关键词

  • c++
  • 编译器
  • 语句
  • atl
  • 信息
  • perrorinfo
  • perrinfo
  • ierrorinfo
  • 错误
  • 处理

得分解答快速导航

  • 帖主:willyhan
  • musicdancer
  • wyzegg

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo