HRESULT是什么类型

【转载】hlw3330219博客

简单地说,就是判断函数执行结果。

COM要求所有的方法都会返回一个HRESULT类型的错误号。HRESULT 其实就一个类型定义:

typedef LONG 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 宏进行判断。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,554评论 1 51
  • 年纪不大,却遇到过各种类型的男生。自认为已经够了,只差那一个可以相伴的人...... 初中,碰到心仪的学长,那种感...
    凛_阅读 225评论 0 3
  • 人活这一辈子,都是从陌生到熟悉,最先认识的就无非是妈妈了。 每个人都渴望去认识这个世界,去认识陌生人。 陌生人有好...
    疯狂的逗比逗阅读 193评论 0 1
  • 昨晚做了一个梦。 在这个惊恐的梦,有好多认识的人,他们组成了这个梦,爷爷是其中之一,但是他已经不在人世。 这个梦惊...
    半岛黄鱼阅读 362评论 0 0