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 宏进行判断。
分享到:
相关推荐
Arcgis 学习--COM 组件的调用返回了错误 HRESULT E_FAIL
试图加载格式不正确的程序。 (异常来自 HRESULT0x8007000B)
可以查询大部分微软错误代码的含义;
COM技术COM技术COM技术 参考书是COM技术内幕,如果大家要看某一部分,课件就很好了
当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。 f、SetLastError 参数指示方法是否保留 Win32"上一错误"。...
软件安装过程中提示“无法注册模块C:\Program Files\XXXXXXX HRESULT-2147010895.请与您的技术支持人员联系。”的问题,以上是我针对自身遇到情况做的一个解决该问题的教程,有错的地方,望大家批评指正。
摘要:VB源码,其它类别,类函数 VB类函数控制返回值,大家都知道VB是不可以设置类函数返回HResult值的,这就使得一些编程很不方便,虽然可以修改成调用全局函数,但是个人总是觉得有违面向对象编程的原则。...
快速查看AE运行过程出现的1000多个异常代码对应的错误描述,如HResult:0x80040210,对应Invalid envelope encountered. HResult:0x80040228,对应License not intialized。
主要介绍了VS2019添加引用出错:对COM组件的调用返回了错误HRESULT E_FAIL(未能完成操作。未指定的错误),需要的朋友可以参考下
Add-AppxPackage : 部署失败,原因是 HRESULT: 0x80073CF3, 包无法进行更新、相关性或冲突验证。 Windows 无法安装程序包 MicrosoftCorporationII.WindowsSubsystemForAndroid_1.7.32815.0_x64__8wekyb3d8bbwe,因为...
在用C++来开发Windows程序时,经常看到下面的判断情况: 代码如下:HRESULT hr = ::RegCreateKeyEx(hk, szKeyPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE, NULL, &hk, NULL);if (SUCCEEDED(hr)) {在...
基于异常的错误检查,可自动执行FAILED()比较。
C# winform缺失 libtensorflow.dll,c# 无法加载DLL“###.dll”,: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
真正解决jmail "0177 (0x800401F3)无效的类别字符串"的配置说明,含jmail安装
DsoFramer.ocx接口及说明 word在线编辑,加密,书签,等2. HRESULT Open([in] VARIANT Document, [in, optional] VARIANT ReadOnly, [in, optional] VARIANT ProgId, [in, optional] VARIANT WebUsername, [in, ...
NULL 博文链接:https://wooffen.iteye.com/blog/836226
ASP.NET和IIS出错问题总结 ASP.NET和IIS出错问题总结 ASP.NET和IIS出错问题总结
HRESULT Open([in] VARIANT Document, [in, optional] VARIANT ReadOnly, [in, optional] VARIANT ProgId, [in, optional] VARIANT WebUsername, [in, optional] VARIANT WebPassword) 打开文档,可以是本地文件...
• COM——到底是什么?...• 基本接口——描述IUnknown基本接口及其方法 ...• 应用COM技术——例子代码,举例说明本文所讨论的所有概念 • 处理HRESULT——HRESULT类型描述,如何监测错误及成功代码