Windows平台判断系统是64位还是32位

开发某应用软件时,需要获取当前系统架构是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

相关资料

WOW64 实现详细信息 - Win32 apps | Microsoft LearnWOW64 模拟器在用户模式下运行。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/win32/winprog64/wow64-implementation-details?redirectedfrom=MSDN

解决方案

就是使用GetNativeSystemInfo函数代替GetSystemInfo,这个函数会将有关当前系统的信息检索到在WOW64下运行的应用程序
代码如下:

​BOOL IsX64System() {
	SYSTEM_INFO si; 
	GetNativeSystemInfo(&si); 
	return si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
		si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ? true : false;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值