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值进行错误检查的工具或技术,它旨在简化在C++编程中处理HRESULT返回值的过程。HRESULT是Windows API和其他COM接口广泛使用的错误代码类型,用来报告操作...
- **返回值**:无返回值。 ##### 3.3 `BSTR AddSeal(BSTR strSealPath, BSTR strSealName)` - **功能描述**:添加印章。 - **参数说明**: - `strSealPath`:印章文件路径。 - `strSealName`:印章名称。 - **...
COM提供了HRESULT返回值,用来表示调用的成功或失败,以及失败的原因。 在这个资源包中,可能包含了一些示例代码、教程文档或者演示程序,帮助初学者理解并实践如何在VC++中进行COM组件的调用。文件...
在DirectCompute中,通常使用HRESULT返回值来处理错误,而在C++ AMP中,错误以异常的形式抛出。文档中省略了处理异常的代码,为了内容的简洁。 综上所述,文档向熟悉DirectCompute和HLSL的程序员介绍了C++ AMP的...
5. **错误处理**:COM使用HRESULT返回值来表示方法调用的结果,包括成功和失败信息,以及具体的错误代码。 通过阅读和分析"COM编程入门Part Ⅱ - 深入理解COM服务器[译]",你可以更深入地掌握COM技术,包括如何创建...
**Jacob使用说明终极吐血版** Jacob(Java和COM Bridge)是一个开源的Java库,它提供了在Java应用程序中调用Windows COM组件的能力。这个库使得Java开发者能够利用大量的已有的COM对象,比如Microsoft Office组件,...
### ATL 数组传递详细说明 #### 一、概述 在 Windows 开发环境下,尤其是在使用 Active Template Library (ATL) 或者 MFC (Microsoft Foundation Classes) 进行 COM 组件开发时,经常需要处理数据结构的传递问题。...
1. **HRESULT**: 表示函数的返回值,通常用于检查COM函数执行的状态。例如,在初始化COM库、查找CLSID、创建OPC服务等操作时会使用到。 2. **CLSID**: 全球唯一标识符,用于唯一标识一个特定的COM对象或服务。在OPC...
- 如何使用COM接口来创建客户端应用程序和理解HRESULT类型返回值。 - 基本概念,如单位、偏移、俯仰和翻滚角度、时间等。 2. 编程示例 - 控制摄像机、项目树管理、对象管理。 - TerraExplorer事件的处理。 - ...
6. **错误处理**:在进行XML操作时,一定要注意错误处理,通过检查`HRESULT`返回值和异常处理机制来确保程序的健壮性。 在实际项目中,可能会遇到如编码问题、XML语法错误等挑战,需要根据具体情况进行调试和解决。...
COM提供了`HRESULT`类型的返回值,用于报告操作成功与否。通常,你需要检查`HRESULT`并处理错误。 在提供的文件中,“TestSafeDoor.sln”是Visual C++的解决方案文件,包含了项目的配置信息。“说明.txt”可能是对...
COM接口使用包括创建客户端应用程序以及理解HRESULT类型返回值的重要性。这使得开发者能够利用COM技术在多种编程语言中进行二次开发。 ### 基本概念 - 单位:在二次开发中,对于空间的度量需要明确其单位,比如米...
- **基本原则**:接口函数的返回值类型一律使用HRESULT,关于HRESULT的描述见附录二。 - **目的**:统一返回值类型,方便错误处理。 **9. 用户输入检查** - **基本原则**:对所有的用户输入,必须进行合法性检查...
在这个过程中,开发者需要了解API函数的参数、返回值以及它们在类型库中的对应项。 在提供的压缩包文件中,有两个文件:winU.tlb和win.tlb。通常,这些文件可能包含了不同的API函数集合,或者可能是不同版本的同一...
- **HRESULT类型返回值**:解释了如何处理由COM接口返回的标准结果代码。 #### 基本概念 - **单位**:介绍了在进行二次开发时使用的测量单位。 - **偏移、俯仰和翻滚角度**:讲解了摄像机的视图变换参数。 - **...
书中还涵盖了COM的错误处理机制,即HRESULT,这是一种特殊的返回值,包含了错误信息和成功/失败的状态。此外,COM的接口继承、版本控制、接口指针转换、延迟绑定、接口安全等高级主题也被详细阐述,这些都是构建复杂...
- **第2行**:声明了一个`HRESULT`类型的变量`result`,用于接收DirectX方法执行后的返回值,从而判断方法是否执行成功。 - **第3行**:调用`DirectSoundCreate`函数创建Direct Sound对象。参数1设为`NULL`,表示...
**返回值**: - 成功时返回 `TRUE`。 - 失败时返回 `FALSE`。 #### 三、封装获取系统路径功能 为了简化上述过程,可以通过编写一个简单的函数来封装这两个函数的功能。 **示例代码**: ```cpp #include #include #...
4. 错误处理:ATL提供了`HRESULT`类型的错误码,通过检查执行命令后的返回值,可以得知操作是否成功,以及发生错误的具体原因。 5. 资源释放:在完成数据操作后,确保正确关闭连接、释放资源,避免内存泄漏。 学习...