用OSVERSIONINFOEX结构取操作系统的版本信息,这个结构里面有个
BYTE wProductType成员
我在vc++6.0中
OSVERSIONINFOEX osvi
然后要使用这个成员,打了点号后wProductType没有出来,我不管了,强制写上去,编译出错,说
'wProductType' : is not a member of '_OSVERSIONINFOEXA']而我在.net中使用相同的方法,打了点号后,wProductType这个成员出来乐,当然编译也不出错了。虽然wProductType不支持95/95/ME,
难道VC6中就不能用wProductType.晕了晕了。

解决方案 »

  1.   

    那是因为在你所包含的头文件中根本就没有定义这个结构,你可以查找一下看一看有没有这个结构^_^。我曾出现过n次这种情况,我猜想原因是在2000年后MSDN中讨论了这种结构,并指明在Winnt.h和Windows.h有定义,但是估计你的VC和我的一样,要么是D版,要么是98版本的.
      

  2.   

    因为这个是判断操作系统是否windowxp,且这个xp是Home Edition还是professinoal的关键,所以非用不可
    也是用来判断操作系统是否是Microsoft Windows .NET,DataCenter Server
    Advanced Server等类型的需要用到的,所以非用不可,哈哈,你总不能叫我不用判断这些类型算了.
      

  3.   

    to demetry()
    我的是d版的,难道还有不是98版的vc6卖吗?是不是98以后版本的vc6就可以用了。我打个sp5看,有没有用
      

  4.   

    重写一下这个结构不知道可行否?typedef struct _OSVERSIONINFOEX {  
    DWORD dwOSVersionInfoSize;  
    DWORD dwMajorVersion;  
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;  
    TCHAR szCSDVersion[128];  
    WORD wServicePackMajor;  
    WORD wServicePackMinor;  
    WORD wSuiteMask;  
    BYTE wProductType;  
    BYTE wReserved;
    } OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
      

  5.   

    TO cbc(逍遥子)
    我在winbase.h加入了wProductType,还是报同样的错误
      

  6.   

    VC++60的库中这个结构没有这个成员
    而在VC++70的库中这个结构有这个成员
    我想是这样最好的方法是不用这个成员
    想其它办法
      

  7.   

    把.Net中的定义COPY过来不就得了
      

  8.   

    把。NET中的定义COPY过来是不行的,
    它已经编译成LIB了
      

  9.   

    这是我从vc6的winbase.h中摘的,我怎么没发现它有BYTE wProductType成员,再说,就算你自己添加进去了,但是系统的lib文件中是不包含这个成员的,除非你能自己编译操作系统的lib文件
    typedef struct _OSVERSIONINFOEXA {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
        DWORD dwMinorVersion;
        DWORD dwBuildNumber;
        DWORD dwPlatformId;
        CHAR   szCSDVersion[ 128 ];     // Maintenance string for PSS usage
        WORD wServicePackMajor;
        WORD wServicePackMinor;
        WORD wReserved[2];
    } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
    typedef struct _OSVERSIONINFOEXW {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
        DWORD dwMinorVersion;
        DWORD dwBuildNumber;
        DWORD dwPlatformId;
        WCHAR  szCSDVersion[ 128 ];     // Maintenance string for PSS usage
        WORD wServicePackMajor;
        WORD wServicePackMinor;
        WORD wReserved[2];
    } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
    #ifdef UNICODE
    typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
    typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
    typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
    #else
    typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
    typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
    typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
    #endif // UNICODE
      

  10.   

    用vc6写好后,在.net下编译也不错
      

  11.   

    to ukyoking(乐易)这个成员是在msdn里面有说明的,我就是想知道在vc6里面怎样才可以用
      

  12.   

    估计是保留字段里面,不用这个该死的变量名就是啦,比如用osvi.wReserved[0]
      

  13.   

    那你怎么知道wReserved[0]就是wProductType的内容
      

  14.   

    OSVERSIONINFOEX在win9x中不支持,需NT5.0 or later.你可以自己重写这个结构。
      

  15.   

    to eastflyhawk(东方飞鹰)
    不要乱说,我现在用的可是2000
      

  16.   

    安装最新的Platform SDK就有这个定义了,如果没有PSDK的话,用osvi.wReserved[0]也可以,但是需要在NT4.0+SP6以上这个域才会被GetVersionEx函数填充