开发某应用软件时,需要获取当前系统架构是x64还是x32。程序为32位应用程序,运行在Win10 64系统下,但是通过api函数GetSystemInfo获取的cpu架构为x86(32位),这显然是不正确的
问题原因
因为Win32程序在Win64上运行需要借助WOW64,它是一个32位的仿真器,微软利用它,来让一个32位程序无缝的运行在64位系统上,在进程创建时,WOW64会为我们的32位进程设置环境变量如下:
由此可见在32位进程中,我们的进程环境变量中的PROCESSOR_ARCHITECTURE被设置为x86,所以我们使用GetSystemInfo的时候,会得到CPU架构x86
相关资料
解决方案:
就是使用GetNativeSystemInfo函数代替GetSystemInfo,这个函数会将有关当前系统的信息检索到在WOW64下运行的应用程序
代码如下:
BOOL IsX64System() {
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
return si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ? true : false;
}