解释 HRESULT 的声明/定义

7

我刚刚查看了VS2008中HRESULT的定义。WinNT.h文件中有以下代码:

typedef __success(return >= 0) long HRESULT;

这到底是什么意思?在我这个外行人的眼中,它甚至看起来都不像C或C++。

3个回答

9
这是一个注解。简而言之,
__success(expr)

这意味着expr描述了函数被视为成功的条件。对于返回HRESULT的函数,该条件是返回值(因为HRESULT是一个long)为非负数。所有返回HRESULT的函数都应用了这个注解,因为这个typedef

在MSDN上可能包含了您永远不想要的更多细节,关于SAL注解从Win32开始的HRESULT演变成功和失败注解


你最后的两个链接已经失效了。 - Rainb

4

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

__success的定义如下:

sal.h:

#define __success(expr)                     __inner_success(expr)

...而inner_success的定义如下:

#define __inner_success(expr)

......什么也不是。因此,HRESULT typedef简化为:

typedef long HRESULT;

4

你的链接已经失效。 - Rainb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接