处理HRESULT

转载 2012年03月31日 08:58:45

处理HRESULT
    这一部分准备用SUCCEEDED 和 FAILED宏进行一些简单的出错处理。主要是深入研究从COM方法返回的HRESULT,以便达到完全理解和熟练应用。
        HRESULT是个32位符号整数,其非负值表示成功,负值表示失败。HRESULT有三个域:程度位(表示成功或失败),功能码和状态码。功能码表示HRESULT来自什么组件或程序。微软给不同的组件多赋予功能码,如:COM、任务调度程序等都有功能码。功能码是个16位的值,仅此而已,没有其它内在含义;它在数字和意义之间是随意关联的;类似GetLastError()返回的值。
    如果你在winerror.h头文件中查找错误代码,会看到许多按照[功能]_[程度]_[描述]命名规范列出的HRESULT值,由组件返回的通用的HRESULT(类似E_OUTOFMEMORY)在名字中没有功能码。如,
REGDB_E_READREGDB: 功能码 = REGDB, 指“注册表数据库(registry database)”;程度 = E 意思是错误(error);描述 = READREGDB 是对错误的描述(意思是不能读注册表数据库)。 
S_OK: 没有功能码——通用(generic)HRESULT;程度=S;表示成功(success);OK 是状

态描述表示一切都好(everything's OK)。
     好在有一种比察看winerror.h文件更容易的方法来确定HRESULT的意思。使用VC提供的错误查找工具(Error Lookup)可以轻松查到为HRESULT内建功能码。例如,假设你在CoCreateInstance()之前忘了调用CoInitialize()。CoCreateInstance()返回的值是0x800401F0。你只要将这个值输入到错误查找工具按“LookUp”按钮,便可以看到错误信息描述“尚未调用CoInitialize”如下图所示:

另外一种查找HRESULT描述的方法是在调试器中。假设有一个HRESULT变量是hres。在Watch窗口的左边框中输入“hres,hr”,表示想要看的值,“hr”便会通知VC显示HRESULT所描述的值。如下图所示:

  

相关文章推荐

COM学习(一)

创建COM对象为了创建COM对象并从这个对象获得接口,必须调用COM库的API函数,CoCreateInstance()。其原型如下:HRESULT CoCreateInstance ( REFCLS...

动态库的对话框中嵌入Com组件的问题

前些天做一个内嵌有IE控件的对话框,我把对话框类封装在一个MFC Regular DLL中。然后测试时发现对话框弹出后,怎么也不能显示出IE的控件。用同样的方法,直接把Dialog放在一个MFC AP...

未处理System.ServiceModel.ProtocolException HResult=-2146233087 Message=响应

(1)、 未处理System.ServiceModel.ProtocolException HResult=-2146233087 Message=响应消息的内容类型 text/html; c...

在制作水晶报表时遇到此错误未处理System.IO.FileNotFoundException HResult=-2147024894

未处理System.IO.FileNotFoundException HResult=-2147024894 Message=未能加载文件或程序集“file:///C:\Program Fil...

错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))

原因可能为: 1.目录权限  2.操作频繁 若是权限问题,按如下步骤: 在运行里面输入:  dcomcnfg  在“服务”里找到这三个服务,都去启动  Distributed Transactio...

WPF 后台Render线程崩溃, Exception from HRESULT: 0x88980406

最近遇到一个问题,窗体在Loaded同时Resize会出现黑屏或者直接崩溃, 调查发现是WPF后端的Render线程渲染UI到DirectX时崩溃。硬件环境:WES7 + .Net4.0关于WPF有2...

卸载 Appdomain 时出错。 (异常来自 HRESULT:0x80131015)

网上一看Appdomain出错,绝大部分都是说控件加载错误,但是这也太广义了。经测试在.net 4.0环境下 rdlc报表很容易发生卸载 Appdomain 时出错。 (异常来自 HRESULT:0x...

安装 VS2008 HRESULT -2147023293 失败解决方法

我机器系统为 Win2003 Server,之前安装了 Office 2010,今天安装VS2008时出现了如下错误信息:[08/31/11,09:30:07] setup.exe: [2] ISet...
  • tanaya
  • tanaya
  • 2011年08月31日 18:15
  • 8430

COM中的HRESULT, CLISD,ProgID, DLL注册,COM库函数的知识(COM技术内幕笔记之三)

http://www.cnblogs.com/shipfi/archive/2007/02/12/648465.html COM中的HRESULT, CLISD,ProgID, DLL注册,COM库...
  • ksrsoft
  • ksrsoft
  • 2012年09月04日 16:22
  • 1061
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:处理HRESULT
举报原因:
原因补充:

(最多只允许输入30个字)