HRESULT 解密
来源:互联网 发布:青少年编程比赛 编辑:程序博客网 时间:2024/05/20 09:46
百度百科中的定义
函数返回值。如果这个函数是执行完返回的话将包含具有实际意义的数据,如果立即返回则包含状态信息--发送成功与否,并不能说明执行的如何。
HRESULT A value returned from a function call to an interface, consisting of a severity code, context information, a facility code, and a status code that describes the result. For 16-bit Windows systems, the HRESULT is an opaque result handle defined to be zero for a successful return from a function, and nonzero if error or status information is to be returned. To convert an HRESULT into a more detailed SCODE (or return value), applications call GetSCode(). See SCODE. HRESULT 是一种简单的数据类型,通常被属性和 ATL 用作返回值。下表说明各种不同的值。头文件 winerror.h 中包含更多的值。HRESULT返回值说明
HRESULT返回值说明 如果函数正常执行,则返回 S_OK,同时真正的函数运行结果则通过参数指针返回。如果遇到了异常情况,则COM系统经过判断,会返回相应的错误值。
HRESULT值含义S_OK0x00000000 成功S_FALSE 0x00000001函数成功执行完成,但返回时出现错误E_INVALIDARG0x80070057参数有错误E_OUTOFMEMORY0x8007000E内存申请错误E_UNEXPECTED0x8000FFFF未知的异常E_NOTIMPL0x80004001 未实现功能E_FAIL0x80004005 没有详细说明的错误E_POINTER0x80004003 无效的指针E_HANDLE0x80070006无效的句柄E_ABORT0x80004004 终止操作E_ACCESSDENIED0x80070005 访问被拒绝E_NOINTERFACE0x80004002不支持接口
HRESULT 其实是一个双字节的值,其最高位(bit)如果是0表示成功,1表示错误。具体参见 MSDN 之"Structure of COM Error Codes"说明。我们在程序中如果需要判断返回值,则可以使用比较运算符号;switch开关语句;也可以使用VC提供的宏:
HRESULT hr = 调用组件函数;
if( SUCCEEDED( hr ) ){...} // 如果成功 ......if( FAILED( hr ) ){...} // 如果失败 ......
HRESULT结构
从字面上看,HRESULT类型好像是一个指向结果结构的句柄,但实际上并不是这样,HRESULT类型是一个32位整数,通常被定义为DWPRD或者long类型。HRESULT的32位被分为四个域:类别码(第30-31位)、自定义标志位(第29位)、操作码(第16-28位)、操作结果码(第0-15位)。
下面对四个部分逐一说明:
(1)类别码 (30-31)
反映函数调用结果:
00 调用成功
01 包含一些信息
10 警告
11 错误
(2)自定义标记(29)
反映结果是否为自定义标识,1 为是,0 则不是;
(3)操作码 (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
(4)操作结果码(0-15)
反映操作的状态,WinError.h 定义了 Win32 函数所有可能返回结果。
以下是一些经常用到的返回值和宏定义:
不能简单地把返回值与 S_OK 和 S_FALSE 比较,而要用 SECCEEDED 和 FAILED 宏进行判断。
推荐在使用HRESULT类型作为引出函数或者作为接口成员函数的返回值时,尽量使用COM或者Win32提供的标准定义。在使用自定义的返回值时,如果要考虑与其他人编写的客户程序或者组件程序运行交互的话,则尽可能符合HRESULT的域含义,并且不要与WinError.h中预定义的常量冲突。
- HRESULT 解密
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- HRESULT
- 什么是HRESULT?
- HRESULT类型
- 什么是HRESULT?
- HRESULT 类型
- 关于HRESULT
- HRESULT 类型
- HRESULT类型
- 软件产品线工程方法 - 三大基本活动
- Spring声明式事务配置管理方法
- 谈opencv的长处与短处
- MapReduce源码分析总结
- C#中的访问修饰符
- HRESULT 解密
- HADOOP:MapReduce源码分析总结
- Linux-- 安装软件(rpm、yum)
- 机器视觉和图像处理方面的研究方面的主要研究单位
- 微软授权方式连载四:Windows 8激活方式概述
- Oracle数据库锁表及解锁进程
- MVC数据流传递原理+OGNL-->自己总结精辟!
- 新闻推送
- Hibernate基础之三:log、单例辅助类