我刚刚查看了VS2008中HRESULT
的定义。WinNT.h文件中有以下代码:
typedef __success(return >= 0) long HRESULT;
这到底是什么意思?在我这个外行人的眼中,它甚至看起来都不像C或C++。
我刚刚查看了VS2008中HRESULT
的定义。WinNT.h文件中有以下代码:
typedef __success(return >= 0) long HRESULT;
这到底是什么意思?在我这个外行人的眼中,它甚至看起来都不像C或C++。
__success(expr)
这意味着expr
描述了函数被视为成功的条件。对于返回HRESULT
的函数,该条件是返回值(因为HRESULT
是一个long
)为非负数。所有返回HRESULT
的函数都应用了这个注解,因为这个typedef
。
在MSDN上可能包含了您永远不想要的更多细节,关于SAL注解、从Win32开始的HRESULT演变和成功和失败注解。
Windows API使用宏黑魔法来创建自己的编程语言。你需要继续深入挖掘。
__success的定义如下:
sal.h:
#define __success(expr) __inner_success(expr)
...而inner_success的定义如下:
#define __inner_success(expr)
......什么也不是。因此,HRESULT typedef简化为:
typedef long HRESULT;