代码之家  ›  专栏  ›  技术社区  ›  Agnel Kurian

解释hresult的声明/定义

  •  4
  • Agnel Kurian  · 技术社区  · 15 年前

    我只是看了一下 HRESULT 在VS2008中。winnt.h有以下行:

    typedef __success(return >= 0) long HRESULT;
    

    这到底是什么意思?它甚至不像我的未受过训练的眼睛一样的C或C++。

    3 回复  |  直到 15 年前
        1
  •  6
  •   jason    15 年前

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

    __success(expr)
    

    意思是说 expr 描述认为函数已成功的条件。对于函数返回 HRESULT ,条件是返回值 结果 是一个 long )是非负的。所有功能返回 结果 因此将此注释应用于它们 typedef .

    可能比你在msdn上想要的要详细得多 SAL Annotations ,请 The Evolution of HRESULT From Win32 Success and Failure Annotations .

        2
  •  3
  •   Pavel Radzivilovsky    15 年前

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

    它有助于提示如何检查函数的返回代码是否意味着它正确地完成了任务。

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

        3
  •  0
  •   John Dibling    15 年前

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

    _成功定义为:

    萨尔:

    #define __success(expr)                     __inner_success(expr)
    

    …内部成功定义为:

    #define __inner_success(expr)
    

    …什么都不是。因此,hresult typedef减少到:

    typedef long HRESULT;