`

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错误检查简化器”是一个专门针对HRESULT值进行错误检查的工具或技术,它旨在简化在C++编程中处理HRESULT返回值的过程。HRESULT是Windows API和其他COM接口广泛使用的错误代码类型,用来报告操作...

    websign开发文档

    - **返回值**:无返回值。 ##### 3.3 `BSTR AddSeal(BSTR strSealPath, BSTR strSealName)` - **功能描述**:添加印章。 - **参数说明**: - `strSealPath`:印章文件路径。 - `strSealName`:印章名称。 - **...

    com_callfunction_vc.rar_CallFunction

    COM提供了HRESULT返回值,用来表示调用的成功或失败,以及失败的原因。 在这个资源包中,可能包含了一些示例代码、教程文档或者演示程序,帮助初学者理解并实践如何在VC++中进行COM组件的调用。文件...

    C% 2b% 2b AMP for the DirectCompute Programmer.pdf

    在DirectCompute中,通常使用HRESULT返回值来处理错误,而在C++ AMP中,错误以异常的形式抛出。文档中省略了处理异常的代码,为了内容的简洁。 综上所述,文档向熟悉DirectCompute和HLSL的程序员介绍了C++ AMP的...

    COMIntro2.zip

    5. **错误处理**:COM使用HRESULT返回值来表示方法调用的结果,包括成功和失败信息,以及具体的错误代码。 通过阅读和分析"COM编程入门Part Ⅱ - 深入理解COM服务器[译]",你可以更深入地掌握COM技术,包括如何创建...

    jacob使用说明终极吐血版

    **Jacob使用说明终极吐血版** Jacob(Java和COM Bridge)是一个开源的Java库,它提供了在Java应用程序中调用Windows COM组件的能力。这个库使得Java开发者能够利用大量的已有的COM对象,比如Microsoft Office组件,...

    ATL数组传递详细说明

    ### ATL 数组传递详细说明 #### 一、概述 在 Windows 开发环境下,尤其是在使用 Active Template Library (ATL) 或者 MFC (Microsoft Foundation Classes) 进行 COM 组件开发时,经常需要处理数据结构的传递问题。...

    OPC_client_在VC环境下编程

    1. **HRESULT**: 表示函数的返回值,通常用于检查COM函数执行的状态。例如,在初始化COM库、查找CLSID、创建OPC服务等操作时会使用到。 2. **CLSID**: 全球唯一标识符,用于唯一标识一个特定的COM对象或服务。在OPC...

    TerraExplorer Pro v7.0.1二次开发用户操作手册

    - 如何使用COM接口来创建客户端应用程序和理解HRESULT类型返回值。 - 基本概念,如单位、偏移、俯仰和翻滚角度、时间等。 2. 编程示例 - 控制摄像机、项目树管理、对象管理。 - TerraExplorer事件的处理。 - ...

    VC 2005 读写XML文件

    6. **错误处理**:在进行XML操作时,一定要注意错误处理,通过检查`HRESULT`返回值和异常处理机制来确保程序的健壮性。 在实际项目中,可能会遇到如编码问题、XML语法错误等挑战,需要根据具体情况进行调试和解决。...

    VC控制台调用COM组件

    COM提供了`HRESULT`类型的返回值,用于报告操作成功与否。通常,你需要检查`HRESULT`并处理错误。 在提供的文件中,“TestSafeDoor.sln”是Visual C++的解决方案文件,包含了项目的配置信息。“说明.txt”可能是对...

    Skyline二次开发手册7.0

    COM接口使用包括创建客户端应用程序以及理解HRESULT类型返回值的重要性。这使得开发者能够利用COM技术在多种编程语言中进行二次开发。 ### 基本概念 - 单位:在二次开发中,对于空间的度量需要明确其单位,比如米...

    vc编码规范.pdf

    - **基本原则**:接口函数的返回值类型一律使用HRESULT,关于HRESULT的描述见附录二。 - **目的**:统一返回值类型,方便错误处理。 **9. 用户输入检查** - **基本原则**:对所有的用户输入,必须进行合法性检查...

    Win.tlb_VB下直接使用API库文件

    在这个过程中,开发者需要了解API函数的参数、返回值以及它们在类型库中的对应项。 在提供的压缩包文件中,有两个文件:winU.tlb和win.tlb。通常,这些文件可能包含了不同的API函数集合,或者可能是不同版本的同一...

    TerraExplorer Pro v7.0.1二次开发用户操作手册.pdf

    - **HRESULT类型返回值**:解释了如何处理由COM接口返回的标准结果代码。 #### 基本概念 - **单位**:介绍了在进行二次开发时使用的测量单位。 - **偏移、俯仰和翻滚角度**:讲解了摄像机的视图变换参数。 - **...

    COM本质论附书源码

    书中还涵盖了COM的错误处理机制,即HRESULT,这是一种特殊的返回值,包含了错误信息和成功/失败的状态。此外,COM的接口继承、版本控制、接口指针转换、延迟绑定、接口安全等高级主题也被详细阐述,这些都是构建复杂...

    第9章 Direct Sound

    - **第2行**:声明了一个`HRESULT`类型的变量`result`,用于接收DirectX方法执行后的返回值,从而判断方法是否执行成功。 - **第3行**:调用`DirectSoundCreate`函数创建Direct Sound对象。参数1设为`NULL`,表示...

    创建快捷方式

    **返回值**: - 成功时返回 `TRUE`。 - 失败时返回 `FALSE`。 #### 三、封装获取系统路径功能 为了简化上述过程,可以通过编写一个简单的函数来封装这两个函数的功能。 **示例代码**: ```cpp #include #include #...

    OLEDB_ATL.rar_ATL_oledb

    4. 错误处理:ATL提供了`HRESULT`类型的错误码,通过检查执行命令后的返回值,可以得知操作是否成功,以及发生错误的具体原因。 5. 资源释放:在完成数据操作后,确保正确关闭连接、释放资源,避免内存泄漏。 学习...

Global site tag (gtag.js) - Google Analytics