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

-判断windows操作系统是32位还是64位-解决方法

2013-11-29 
-----------------------------判断windows操作系统是32位还是64位-----------------------------网上找的

-----------------------------判断windows操作系统是32位还是64位-----------------------------
网上找的都不行
我在win7 64位上面能判断出结果是64位的
但是在windows server 2003 上面的判断系统的结果也是64位的 这个系统cpu是64位的
系统实际是32位的

程序编译成32位的


//第一种方法
SYSTEM_INFO si;   
GetNativeSystemInfo(&si);//这个应该判断cpu架构的 不是操作系统的
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || 
si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_IA64 ) 
is64 = false;


//第二种方法也不行
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
return FALSE;
else
return TRUE;
}
return bIsWow64;
}
//第三种方法
SYSTEM_INFO siSysInfo;
// Copy the hardware information to the SYSTEM_INFO structure. 
GetSystemInfo(&siSysInfo); 
printf("Hardware information: \n");  
printf("  OEM ID: %u\n", siSysInfo.dwOemId);
printf("  Number of processors: %u\n", siSysInfo.dwNumberOfProcessors); 
printf("  Page size: %u\n", siSysInfo.dwPageSize); 
printf("  Processor type: %u\n", siSysInfo.dwProcessorType); 
printf("  Minimum application address: %lx\n", siSysInfo.lpMinimumApplicationAddress); 
printf("  Maximum application address: %lx\n", siSysInfo.lpMaximumApplicationAddress); 
printf("  Active processor mask: %u\n", siSysInfo.dwActiveProcessorMask); 

结果如下:
Hardware information:
  OEM ID: 0
  Number of processors: 1
  Page size: 4096
  Processor type: 586
  Minimum application address: 10000
  Maximum application address: 7ffeffff
  Active processor mask: 1

[解决办法]
Solution 1. Use the IsWow64Process function
Solution 2. Query the Win32_Processor WMI class's AddressWidth property
http://code.msdn.microsoft.com/windowsdesktop/CppCheckOSBitness-a16c69e4
[解决办法]
http://stackoverflow.com/questions/1647930/is-it-possible-to-check-whether-you-are-building-for-64-bit-with-microsoft-c-com

http://www.viva64.com/en/k/0040/

热点排行