解释 HRESULT 的声明/定义

发布于 2024-08-16 03:26:53 字数 176 浏览 10 评论 0原文

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

typedef __success(return >= 0) long HRESULT;

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

I just looked at the definition of HRESULT in VS2008. WinNT.h has the following line:

typedef __success(return >= 0) long HRESULT;

What exactly does it mean? It doesn't even look like C or C++ to my untrained eye

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雅心素梦 2024-08-23 03:26:53

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

__success(expr)

意味着 expr 描述了函数被视为成功的条件。对于返回 HRESULT 的函数,该条件是返回值(因为 HRESULTlong)为非负数。由于此 typedef,所有返回 HRESULT 的函数都会应用此注释。

可能比 MSDN 中关于 SAL 注释的信息更详细 HRESULT 从 Win32 的演变成功和失败注释

It is an annotation. In short,

__success(expr)

means that expr describes the conditions under which a function is considered to have succeeded. For functions returning HRESULT, that condition is that the return value (since HRESULT is a long) is non-negative. All functions returning HRESULT have this annotation applied to them because of this typedef.

Probably way more detail than you will ever want in MSDN on SAL Annotations, The Evolution of HRESULT From Win32 and Success and Failure Annotations.

完美的未来在梦里 2024-08-23 03:26:53

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

__success 定义为:

sal.h:

#define __success(expr)                     __inner_success(expr)

... 而 inner_success 定义为:

#define __inner_success(expr)

... 没什么。因此 HRESULT typedef 简化为:

typedef long HRESULT;

The Windows API is using macro black magic here to create thier own programming language. You needed to keep digging.

__success is defined as:

sal.h:

#define __success(expr)                     __inner_success(expr)

...and inner_success is defined as:

#define __inner_success(expr)

...which is nothing. So the HRESULT typedef reduces to:

typedef long HRESULT;
鲜血染红嫁衣 2024-08-23 03:26:53

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

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

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

This MS-specific keyword is for static code analysis tools.

It helps by hint on how to check whether function's return code means that it completed the task properly.

For instance, see http://msdn.microsoft.com/en-us/library/aa468782.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文