处理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所描述的值。如下图所示:

  

boost静态链接库和c++/clr不兼容问题:未能加载文件或程序集,不是有效的Win32应用程序。

项目上遇到的问题:c++编写的类使用托管c++包装成dll提供给c#项目使用。c++需要使用boost,clr,项目目标平台都是win32/x86。开发环境win10 x64系统,vs2013,.Ne...
  • h807892124
  • h807892124
  • 2016年05月05日 21:38
  • 1559

深入HRESULT与Windows Error Codes的区别详解

在用C++来开发Windows程序时,经常看到下面的判断情况: 复制代码 代码如下: HRESULT hr = ::RegCreateKeyEx(hk, szKeyPath, 0, NUL...
  • imJaron
  • imJaron
  • 2017年11月02日 09:06
  • 69

boost linux下编译

http://www.cnblogs.com/skyofbitbit/p/3651446.html
  • linfengmove
  • linfengmove
  • 2017年01月23日 13:22
  • 172

处理HRESULT

处理HRESULT     这一部分准备用SUCCEEDED 和 FAILED宏进行一些简单的出错处理。主要是深入研究从COM方法返回的HRESULT,以便达到完全理解和熟练应用。        ...
  • autumn20080101
  • autumn20080101
  • 2012年03月31日 08:58
  • 677

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

(1)、 未处理System.ServiceModel.ProtocolException HResult=-2146233087 Message=响应消息的内容类型 text/html; c...
  • u014180504
  • u014180504
  • 2014年11月29日 12:19
  • 4284

HRESULT返回值解析

HRESULT返回值说明 如果函数正常执行,则返回 S_OK,同时真正的函数运行结果则通过参数指针返回。如果遇到了异常情况,则COM系统经过判断,会返回相应的错误值。 HRESULT      ...
  • Yoryky
  • Yoryky
  • 2014年07月02日 16:44
  • 721

添加了license还是报 异常来自 HRESULT:0x80040228

今天超级郁闷,都已经在程序添加了LicenseControl控件的了gis开发的时候创建工作空间报错:一直报异常来自 HRESULT:0x80040228这个错误 终于找到了解决方法:      1)...
  • wu_qihui
  • wu_qihui
  • 2011年06月09日 16:26
  • 1738

ArcEngine 异常来自 HRESULT:0x80040356

在对 IEngineEditor.StartEditing(IWorkspace ,IMap) 操作时提示:异常来自 HRESULT:0x80040356。 这主要是因为没有设置EditSessio...
  • chanyinhelv
  • chanyinhelv
  • 2013年03月12日 14:49
  • 2464

HRESULT用法

HRESULT 常被用作COM调用的返回值。充分利用HRESULT返回信息可以帮助提高我们的代码质量,提供程序的健壮性。以下是HRESULT用法小结: 1. HRESULT 值及其含义。 S_OK...
  • u010497938
  • u010497938
  • 2015年10月06日 16:54
  • 391

HRESULT:0x80040228异常解决

    今天写程序的时候有打开工作空间的如下代码:    IFeatureWorkspace pFWS; IWorkspaceFactory pWorkspaceFactory = new ...
  • wap168
  • wap168
  • 2010年07月26日 15:33
  • 3307
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:处理HRESULT
举报原因:
原因补充:

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