读书人

大家帮小弟我看一下这段代码看看有关

发布时间: 2012-02-20 21:18:23 作者: rapoo

大家帮我看一下这段代码,看看问题出在哪里
这段代码是取得操作系统的版本号,奇怪的是,明明是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的话,继续执行了,判断版本号没有错误.
[解决办法]
路过
[解决办法]
学习学习~~

读书人网 >C++ Builder

热点推荐