解释HRESULT的声明/定义

时间:2009-12-31 13:59:31

标签: c++ c visual-studio-2008 winapi hresult

我刚看了VS2008中HRESULT的定义。 WinNT.h有以下几行:

typedef __success(return >= 0) long HRESULT;

究竟是什么意思?对于我未经训练的眼睛,它甚至看起来不像C或C ++

3 个答案:

答案 0 :(得分:6)

这是一个注释。简而言之,

__success(expr)

表示expr描述了功能被认为成功的条件。对于返回HRESULT的函数,该条件是返回值(因为HRESULTlong)是非负的。由于此HRESULT,所有返回typedef的函数都会将此注释应用于它们。

可能会在SAL AnnotationsThe Evolution of HRESULT From Win32Success and Failure Annotations上的MSDN中获得比您想要的更多详细信息。

答案 1 :(得分:3)

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

通过暗示如何检查函数的返回代码是否意味着它正确地完成了任务,它有所帮助。

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

答案 2 :(得分:0)

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

__成功定义为:

sal.h:

#define __success(expr)                     __inner_success(expr)

...而inner_success定义为:

#define __inner_success(expr)

......这没什么。所以HRESULT typedef简化为:

typedef long HRESULT;