首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释HRESULT的声明/定义

解释HRESULT的声明/定义
EN

Stack Overflow用户
提问于 2009-12-31 21:59:31
回答 3查看 10K关注 0票数 6

我刚刚查看了VS2008中HRESULT的定义。WinNT.h包含以下行:

代码语言:javascript
复制
typedef __success(return >= 0) long HRESULT;

这到底是什么意思?在我未经训练的眼睛看来,它甚至不像C或C++

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-31 22:03:06

它是一个注解。总之,

代码语言:javascript
复制
__success(expr)

表示expr描述了函数被视为已成功的条件。对于返回HRESULT的函数,条件是返回值(因为HRESULTlong)是非负的。由于这个typedef,所有返回HRESULT的函数都应用了这个注释。

可能比你在SAL AnnotationsThe Evolution of HRESULT From Win32Success and Failure Annotations上的MSDN中想要的更详细。

票数 8
EN

Stack Overflow用户

发布于 2009-12-31 22:06:55

这个特定于MS的关键字用于静态代码分析工具。

它通过提示如何检查函数的返回码是否意味着它正确地完成了任务来提供帮助。

例如,请参见http://msdn.microsoft.com/en-us/library/aa468782.aspx

票数 4
EN

Stack Overflow用户

发布于 2009-12-31 22:05:08

Windows API在这里使用宏黑魔法来创建自己的编程语言。你需要继续挖掘。

__success定义为:

sal.h:

代码语言:javascript
复制
#define __success(expr)                     __inner_success(expr)

...and inner_success定义为:

代码语言:javascript
复制
#define __inner_success(expr)

...which什么都不是。因此,HRESULT类型定义函数简化为:

代码语言:javascript
复制
typedef long HRESULT;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1985521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档