首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

大家帮小弟我看一下这段代码,看看有关问题出在哪里

2012-02-20 
大家帮我看一下这段代码,看看问题出在哪里这段代码是取得操作系统的版本号,奇怪的是,明明是XP的,应该返回9

大家帮我看一下这段代码,看看问题出在哪里
这段代码是取得操作系统的版本号,奇怪的是,明明是XP的,应该返回9,但返回的却是12,是Windows 7!Windows 2000的,返回的应该是8,但这段代码返回的却是10,变成Vista了!如果将Windows 7的2行代码去掉,XP取回的值就正常了,是9;如果将case 6下的代码去掉,Windows 2000的返回值也正常了,是8。究竟问题出在哪里呢?

int __fastcall TForm1::GetSysVer(void)
{
  int iOSV = 0; //用数字表示最终得到的版本号
  OSVERSIONINFO osv; //声明版本结构
  osv.dwOSVersionInfoSize = sizeof(osv);
  GetVersionEx(&osv);
  switch(osv.dwPlatformId)
  {
  case VER_PLATFORM_WIN32s:
  iOSV = 1; //Windows 3.1
  break;
  case VER_PLATFORM_WIN32_WINDOWS:
  switch(osv.dwMinorVersion)
  {
  case 0:
  iOSV = 2; //Windows 95 或 Windows 97 (其实就是Windows95的升级版本)
  break;
  case 10:
  if(osv.szCSDVersion[1] == 'A')
  iOSV = 3; //Windows 98 SE
  else
  iOSV = 4; //Windows 98
  break;
  case 90:
  iOSV = 5; //Windows ME
  }
  break;
  case VER_PLATFORM_WIN32_NT:
  switch(osv.dwMajorVersion)
  {
  case 3:
  iOSV = 6; //Windows NT 3.51
  break;
  case 4:
  iOSV = 7; //Windows NT 4.0
  break;
  case 5:
  switch(osv.dwMinorVersion)
  {
  case 0: //Windows 2000
  iOSV = 8;
  break;
  case 1: //Windows XP
  iOSV = 9;
  }
  case 6:
  switch(osv.dwMinorVersion)
  {
  case 0:
  if(osv.szCSDVersion[1] == 'S')
  iOSV = 11; //Windows Vista SP1以上
  else
  iOSV = 10; //Windows Vista
  break;
  case 1:
  iOSV = 12; //Windows 7
  }
  }
  }
  return iOSV;
}

[解决办法]
修改后的代码如下,未检查是否有其他错误。

C/C++ code
int __fastcall TForm1::GetSysVer(void){    int iOSV = 0; //用数字表示最终得到的版本号    OSVERSIONINFO osv; //声明版本结构    osv.dwOSVersionInfoSize = sizeof(osv);    GetVersionEx(&osv);    switch(osv.dwPlatformId)    {        case VER_PLATFORM_WIN32s:        {            iOSV = 1; //Windows 3.1            break;        }        case VER_PLATFORM_WIN32_WINDOWS:        {            switch(osv.dwMinorVersion)            {                case  0:                {                    iOSV = 2; //Windows 95 或 Windows 97 (其实就是Windows95的升级版本)                    break;                }                case 10:                {                    if(osv.szCSDVersion[1] == 'A')                        iOSV = 3; //Windows 98 SE                    else                        iOSV = 4; //Windows 98                    break;                }                case 90:                {                    iOSV = 5; //Windows ME                    break;                }                default:                    break;            }            break;        }        case VER_PLATFORM_WIN32_NT:        {            switch (osv.dwMajorVersion)            {                case 3:                {                    iOSV = 6; //Windows NT 3.51                    break;                }                case 4:                {                    iOSV = 7; //Windows NT 4.0                    break;                }                case 5:                {                    switch (osv.dwMinorVersion)                    {                        case 0: //Windows 2000                        {                            iOSV = 8;                            break;                        }                        case 1: //Windows XP                        {                            iOSV = 9;                            break;                        }                        default:                            break;                    }                    break;                }                case 6:                {                    switch (osv.dwMinorVersion)                    {                        case 0:                        {                            if (osv.szCSDVersion[1] == 'S')                                iOSV = 11; //Windows Vista SP1以上                            else                                iOSV = 10; //Windows Vista                            break;                        }                        case 1:                        {                            iOSV = 12;  //Windows 7                            break;                        }                        default:                            break;                    }                }                default:                    break;            }            break;        }        default:            break;    }    return iOSV;} 


[解决办法]
ding
[解决办法]

探讨
修改后的代码如下,未检查是否有其他错误。

C/C++ codeint __fastcall TForm1::GetSysVer(void)
{
int iOSV = 0; //用数字表示最终得到的版本号
OSVERSIONINFO osv; //声明版本结构
osv.dwOSVersionInfoSize = sizeof(osv);
GetVersionEx(&osv);
switch(osv.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
{
iOSV = 1; //Windows 3.1
break;


[解决办法]
没有break的话,继续执行了,判断版本号没有错误.
[解决办法]
路过
[解决办法]
学习学习~~

热点排行