none
【vc++学习】头文件WinNT.h中的永假式 RRS feed

  • 问题

  • // Handle to an Object
    
    //
    
    
    
    #ifdef STRICT
    
    typedef void *HANDLE;
    
    #if 0 && (_MSC_VER > 1000)
    
    #define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
    
    #else
    
    #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
    
    #endif
    
    #else
    
    typedef PVOID HANDLE;
    
    #define DECLARE_HANDLE(name) typedef HANDLE name
    
    #endif
    
    typedef HANDLE *PHANDLE;
    
    
    请问这里为什么写一个永假式
    #if 0 && (_MSC_VER > 1000)
    
    #define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
    
    
    微软开发人员这样做应该是有原因的,但是什么原因,我还不明白。希望知道的大侠给我解惑一下,万分感谢!
    2010年8月4日 2:41

答案

  •  
     
    2010年8月4日 4:53
  • 呵呵,这个原因很简单,上面那个是给Windows开发人员用的,对应用程序开发人员不需要知道handle的内部结构,要把handle定义成一个特殊的结构体,就是那个unused,从而隐藏内部结构.

    我记得我原来不知道在MS哪个XX的博克上面看到过.

    这个不用细究,你若看NT4.0的源代码就可以发现定义是用的上面那个


    0xBAADF00D
    2010年8月5日 7:49
    版主

全部回复