1.判断程序位数:当前程序被编译到了哪个平台。
2.判操作系统位数:当前程序是运行在32位的操作系统上,还是64位的操作系统。
对于第一种——判断程序位数,虽然也可以通过配置预处理符号,做编译时判定。但该方法稍微有点繁琐,而且在有些情况下不太适合——例如我想获得程序位数字符串,就必须用“#if”等语句写多行代码。
对于第二种——判操作系统位数,那就只有在运行时判断了。
代码如下——
[cpp]
view plain
copy
- #include <Windows.h>
- #include <stdio.h>
- #include <tchar.h>
- #include <conio.h>
- // 获取程序位数(被编译为多少位的代码)
- int GetProgramBits()
- {
- return sizeof(int*) * 8;
- }
- // 安全的取得真实系统信息
- VOID SafeGetNativeSystemInfo(__out LPSYSTEM_INFO lpSystemInfo)
- {
- if (NULL==lpSystemInfo) return;
- typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
- LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");;
- if (NULL != fnGetNativeSystemInfo)
- {
- fnGetNativeSystemInfo(lpSystemInfo);
- }
- else
- {
- GetSystemInfo(lpSystemInfo);
- }
- }
- // 获取操作系统位数
- int GetSystemBits()
- {
- SYSTEM_INFO si;
- SafeGetNativeSystemInfo(&si);
- if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
- si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
- {
- return 64;
- }
- return 32;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- const int nBitCode = GetProgramBits();
- const int nBitSys = GetSystemBits();
- _tprintf(_T("I am a %dbit Program, run on %dbit System."), nBitCode, nBitSys);
- //
- _getch();
- return 0;
- }
在32位winXP上的运行效果——
在64位win7上的运行效果——
注:
1.GetNativeSystemInfo是Windows XP的新增API,用于取得真实系统信息。(32位程序运行在64位系统上时,GetSystemInfo返回的是经过WOW64修改后的信息)
2.IsWow64Process用于判断某进程是否运行在WOW64下。对于64位程序,Wow64Process参数会返回FALSE。