HRESULT返回值说明

From: http://www.blogjava.net/JAVA-HE/archive/2010/01/04/308134.html


HRESULT返回值说明 如果函数正常执行,则返回 S_OK,同时真正的函数运行结果则通过参数指针返回。如果遇到了异常情况,则COM系统经过判断,会返回相应的错误值。

HRESULT         值          含义
S_OK            0x00000000  成功
S_FALSE         0x00000001  函数成功执行完成,但返回时出现错误
E_INVALIDARG    0x80070057  参数有错误
E_OUTOFMEMORY   0x8007000E  内存申请错误
E_UNEXPECTED    0x8000FFFF  未知的异常
E_NOTIMPL       0x80004001  未实现功能
E_FAIL          0x80004005  没有详细说明的错误。一般需要取得 Rich Error 错误信息(注1)
E_POINTER       0x80004003  无效的指针
E_HANDLE        0x80070006  无效的句柄
E_ABORT         0x80004004  终止操作
E_ACCESSDENIED  0x80070005  访问被拒绝
E_NOINTERFACE   0x80004002  不支持接口

HRESULT 其实是一个双字节的值,其最高位(bit)如果是0表示成功,1表示错误。具体参见 MSDN 之"Structure of COM Error Codes"说明。我们在程序中如果需要判断返回值,则可以使用比较运算符号;switch开关语句;也可以使用VC提供的宏:
     HRESULT hr = 调用组件函数;
      if( SUCCEEDED( hr ) ){...} // 如果成功
      ......
      if( FAILED( hr ) ){...} // 如果失败
      ......

大多数 COM 函数以及一些接口成员函数的返回值类型均为 HRESULT 类型。HRESULT 类型的返回值反映了函数中的一些情况,其类型定义规范如下:

   31 30 29 28                    16 15                                0
  |-----|--|------------------------|-----------------------------------|

类别码 (30-31) 反映函数调用结果:
                00 调用成功
                01 包含一些信息
                10 警告
                11 错误
自定义标记(29) 反映结果是否为自定义标识,1 为是,0 则不是;
操作码 (16-28) 标识结果操作来源,在 Windows 平台上,其定义如下:
                #define FACILITY_WINDOWS         8
                #define FACILITY_STORAGE         3
                #define FACILITY_RPC             1
                #define FACILITY_SSPI            9
                #define FACILITY_WIN32           7
                #define FACILITY_CONTROL         10
                #define FACILITY_NULL            0
                #define FACILITY_INTERNET        12
                #define FACILITY_ITF             4
                #define FACILITY_DISPATCH        2
                #define FACILITY_CERT            11
操作结果码(0-15) 反映操作的状态,WinError.h 定义了 Win32 函数所有可能返回结果。
                以下是一些经常用到的返回值和宏定义:
                S_OK            函数执行成功,其值为 0 (注意,其值与 TRUE 相反)
                S_FALSE         函数执行成功,其值为 1
                S_FAIL          函数执行失败,失败原因不确定
                E_OUTOFMEMORY   函数执行失败,失败原因为内存分配不成功
                E_NOTIMPL       函数执行失败,成员函数没有被实现
                E_NOTINTERFACE  函数执行失败,组件没有实现指定的接口

不能简单地把返回值与 S_OK 和 S_FALSE 比较,而要用 SECCEEDED 和 FAILED 宏进行判断。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Altiris™ IT Management Suite 7 Release Notes

Introduction Altiris™ IT Management Suite from Symantec is the industry’s most comprehensive and integrated suite for reducing the cost and complexity of owning and managing corporate IT assets including desktops, laptops, thin clients, servers, and hete…

dscp值_DSCP 与IP 优先级

IP优先级在IPv4的报文头中,TOS字段是1字节,如下图所示。根据RFC1122的定义,IP优先级(IP Precedence)使用最高3比特(第0~3比特)。+++++++&#xff…

SQL SERVER 参考:游标(Cursor)的讲解与实例

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_SQL 选择语句相关联,因为游…

PAT 1013 数素数 (20)

题目 /*1013. 数素数 (20)令Pi表示第i个素数。现任给两个正整数M < N < 10^4&#xff0c;请输出PM到PN的所有素数。输入格式&#xff1a;输入在一行中给出M和N&#xff0c;其间以空格分隔。输出格式&#xff1a;输出从PM到PN的所有素数&#xff0c;每10个数字占1行&#…

js实现将数据导出为excel文件

js实现将数据导出为excel文件

VC6 CImage 加载jpg png bmp

From: http://hi.baidu.com/crazyonline/blog/item/3bad6959b2d31b232934f0f4.html 今天改一个VC6的程序&#xff0c;因为需要加载png和jpg图像&#xff0c;于是想到了CImage&#xff0c;但是VC6又不支持CImage类&#xff0c;郁闷了&#xff0c;网上看了一下&#xff0c;都是改…

csgo被会话踢出什么鬼_【解决方案】“CSGO游戏—断开连接,VAC无法验证会话”问题解决方案...

本帖最后由 漠视迩旳骄傲 于 2020-4-23 17:01 编辑近期陆续收到很多小伙伴们反馈“CSGO游戏—断开连接&#xff0c;VAC无法验证会话”问题&#xff0c;此问题并非360安全卫士导致。我们收集了游戏官网与热心网友提供的解决方法&#xff0c;整理此方案贴供大家参考&#xff0c;解…

Cross-Site Scripting(XSS)的类型

本文源自&#xff1a; https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting 在原文理解上翻译为中文。 背景 本文描述多种不同类型的XSS攻击&#xff0c;和它们之间的相互关系。 最早&#xff0c;有两种类型的XSS攻击被定义&#xff0c;Stored 和 Reflected &#…

DynamipsGUI下CISCO SDM的安装配置

本人刚开始自学CCNA&#xff0c;在教材里有许多SDM内容&#xff0c;但是手头又没有CISCO路由器&#xff0c;只能借助于模拟器。一开始用的是SDM的DEMO版本&#xff0c;虽然也进去了&#xff0c;但是有很多功能没法使用&#xff0c;只能起熟悉作用&#xff0c;于是就想找一个更好…

原生js实现tab选项卡切换

原生js实现tab选项卡切换

CImage类的用法(转帖)

From: http://elevenguy.blog.163.com/blog/static/616122092010053550593/ 我们知道&#xff0c;Visual C的CBitmap类和静态图片控件的功能是比较弱的&#xff0c;它只能显示出在资源中的图标、位图、光标以及图元文件的内容&#xff0c;而不像VB中的Image控件可 以显示出绝大…

java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)

队列的定义&#xff1a;队列(Queue)是只允许在一端进行插入&#xff0c;而在另一端进行删除的运算受限的线性表。(1)允许删除的一端称为队头(Front)。(2)允许插入的一端称为队尾(Rear)。(3)当队列中没有元素时称为空队列。(4)队列亦称作先进先出(First In First Out)的线性表&a…

ListT please check srcIndex

这种错误的原因&#xff0c;是因为List<T>不是线程安全的。 转载于:https://www.cnblogs.com/chucklu/p/4303873.html

vue 实现点击“增加“”按钮,添加一个HTML元素

vue 实现点击“增加“”按钮&#xff0c;添加一个HTML元素

期待flash三剑客

flash cs5 flash catalyst flash builder