#ifndef _HRESULT_DEFINED
#define _HRESULT_DEFINED
#ifdef __midl
typedef LONG HRESULT;
#else
typedef __success(return >= 0) long HRESULT;
#endif // __midl
#endif // !_HRESULT_DEFINED

解决方案 »

  1.   

    倒数第三行中的return是个什么玩意?
      

  2.   

    看了一下,确实是MS上的源代码 WinNT.h ,不过,还真不知道是怎么回事。
      

  3.   

    __success不也是宏吗,把它展开看看
      

  4.   

    __success是个没有实际意义的宏,(return >= 0)是宏参数,给什么内容都没关系,对程序没有影响,目的是说明HRESULT类型大于等于0表示成功。
      

  5.   

    类似的宏还有IN、OUT等,例如:
    #define IN
    #define OUT
    void Function(IN int a, OUT int* b);
    在这里IN和OUT也没有实际意义,只是为了让人知道参数是用做输入还是输出。
      

  6.   


    "目的是说明HRESULT类型大于等于0表示成功。",这句话我有点疑问:比如:HRESULT hRet = -10;hRet被给与了一个小于0的值,这样子合法吗?
      

  7.   

    是不是这个意思:HRESULT类型的变量一般是用来接收函数的返回值的,比如:
    HRESULT Caller()
    {
    ...
    HRESULT hRet = fun();
    return hRet;
    }这里的fun()可以返回小于0的值,只是一旦fun()返回的值小于0,就表示调用Caller()没有成功?
      

  8.   


    针对这个例子,我想再问一个问题:由于#define IN 
    #define OUT 对IN和OUT的定义是空,即IN和OUT什么也不代表,那么
    void Function(IN int a, OUT int* b); 
    在编译器看来是不是就是:
    void Function(int a, int* b); 
    ??
    代码中出现IN和OUT只是告诉代码阅读者这两个参数一个是输入型,一个是输出型呢?
      

  9.   

    10L:合法。HRESULT通常用来作为函数的返回值类型,小于0表示失败,大于等于0表示成功。另外从编译角度来说,这类宏对编译没有任何影响。
    11L:对。
    12L:就是这个意思。