BOOL ChkSystemVersion()
{
OSVERSIONINFOEX   osvi;   
    BOOL   bOsVersionInfoEx, bRet = FALSE; 

ZeroMemory(&osvi,   sizeof(OSVERSIONINFOEX));   
osvi.dwOSVersionInfoSize   =   sizeof(OSVERSIONINFOEX);   
    
if(   !(bOsVersionInfoEx   =   GetVersionEx   ((OSVERSIONINFO   *)   &osvi))   )   
{   
osvi.dwOSVersionInfoSize   =   sizeof   (OSVERSIONINFO);   
if   (!   GetVersionEx   (   (OSVERSIONINFO   *)   &osvi)   )     
return   FALSE;   
}   

if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)   
{   
if   ((osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) || (osvi.dwMajorVersion <= 4))
return FALSE;
else
return TRUE;
}
else
return FALSE;
}上面是获取系统版本函数,如何把上面的函数转换为宏定义函数,我想判断操作系统的类型,如果是win2000就去掉某些函数,因为win2000下一些接口没有。

解决方案 »

  1.   

    操作系统版本是调用api得到的, 不能直接用宏.可以初始化的时候获取版本号, 以后编写代码的时候, 拿版本号来进行判断编码就行
      

  2.   

    还是根据获取版本的函数,返回不同的 返回值来区分版本,后面根据返回的版本数据再调用不同平台API等
      

  3.   

    不用API
    int a=0,b=0,i=0,j=0;
        _asm
        {
          pushad
          mov ebx,fs:[0x18] ; get self pointer from TEB
          mov eax,fs:[0x30] ; get pointer to PEB / database
          mov ebx,[eax+0A8h] ; get OSMinorVersion
          mov eax,[eax+0A4h] ; get OSMajorVersion
          mov j,ebx
          mov i,eax
          popad
        }    if((i==5)&&(j==0))
        {
          AfxMessageBox("系统版本为 Windows 200",MB_OK);
        }
        else if((i==5)&&(j==1))
        {  
          AfxMessageBox("系统版本为 Windows Xp",MB_OK);
        }
        else if((i==5)&&(j==2))    {
          AfxMessageBox("系统版本为 Windows 200",MB_OK);
        }
        else if((i==6)&&(j==0))
        {
          AfxMessageBox("系统版本为 WindowsVista",MB_OK);
        }
      

  4.   

    getversionEx函数,用汇编不可移植,或者直接用getprocessaddress函数来获取指定函数来粗略判断.
      

  5.   

    接口有没有跟操作系统版本没得关系啊,跟你目前用的SDK版本才是相关的
    这种情况一般是通过_MSC_VER 来判断SDK的版本啊
      

  6.   

    GetVersionEx是正统方法。
    另_MSC_VER是当前编译使用的编译器版本