HRESULT返回值
HRESULT返回值
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 宏进行判断。
HRESULT返回值相关推荐
- HRESULT返回值说明
From: http://www.blogjava.net/JAVA-HE/archive/2010/01/04/308134.html HRESULT返回值说明 如果函数正常执行,则返回 S_OK, ...
- HRESULT返回值解析
HRESULT返回值说明 如果函数正常执行,则返回 S_OK,同时真正的函数运行结果则通过参数指针返回.如果遇到了异常情况,则COM系统经过判断,会返回相应的错误值. HRESULT ...
- 返回值由hresult变为void型_java高级之泛型
点击蓝字关注我们 初识泛型 走进泛型 方法形参与实参类比 从一个方法的实参和形参说起: //现在定义了一个add方法,两个参数,参数类型为Integer,i.j是形参.private Integer ...
- IXMLDOMDocument中的load方法返回值有BUG
IXMLDOMDocument中的load方法返回值是否有BUG IXMLDOMDocument中load一个xml文件时,返回值和msdn上说的不符 MSDN上说的是: Return Values ...
- 如何用mshtml获得Javascript中function的返回值[mshtml]
marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/ ...
- Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)
1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...
- Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法
函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...
- Python 函数参数有冒号 声明后有- 箭头 返回值注释 参数类型注释
在python3.7 环境下 函数声明时能在参数后加冒号,如图: 1 def f(ham: str, eggs: str = 'eggs') -> str : 2 print("Ann ...
- [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...
最新文章
- 解决真机编译出现System.DllNotFoundException: 'libmono-native.so'错误都方法
- 专访清华AIR院长张亚勤:AI在疫情中很重要,但却很「表面」
- 拿下赌场新客户,但马斯克“超级隧道”何时才能颠覆地面交通?
- python操作excel之 模块 xlrd
- 来给你20个优秀的......前端轮播图插件
- 生产者消费者模型的学习
- 读取/书写Java的XML格式properties文件
- [js] innerHTML有什么缺点?
- 程序员,你的粮草何在?
- 华为手机文件在内部存储路径_华为手机查找文件路径 华为文件夹在哪里
- 等级保护三级安全建设
- 饥荒联机一直显示正在启动服务器,饥荒联机版一直正在启动服务器 | 手游网游页游攻略大全...
- 中英文论文写作指导第三部分(实验、材料和方法部分)
- 电子信息专业实习报告与总结
- 【推荐】数据治理资料合集
- PHP实现添加到错题本,制作错题本的步骤、使用方式及窍门!
- Python|判断素数
- vue 商城浏览足迹_vue 移动端记录页面浏览位置的方法
- 【Socket编程】Python实现一个服务端,多个客户端接入
- JanusGraph ,生产环境安装
热门文章
- harbor webhook异常一则 harbor源码构建调试记录
- java后端面试2021知识点大总结(超广范围全包含,随时更新)
- LESS 和 SCSS 有什么区别?
- php mysql js弹出登陆小窗口_基于Jquery+div+css实现弹出登录窗口(代码超简单)_jquery...
- linux mknod命令解析【转】
- 解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。[Error]尚未完成社区身份验证
- 微信小程序:正则匹配判断电话号码
- 【仿真-simulation】仿真概念的介绍
- 如何用反余弦求pi c语言,acos()_C语言acos()详解:反余弦函数,求反余弦值
- 2023自助洗车店系统解决方案共享洗车无人洗车风口