问题
有时候碰到一个需求:如何通过代码的方式,判断当前系统是32位还是64位的?
直接上代码
废话不多说,直接上代码,稍后进行解释。

以上函数对当前系统是否为64位进行判断,因为当前所有系统只有32位和64位两种,所以,如果以上函数返回TRUE,则代表当前系统是64位的,反之,则是32位系统。
原理解释
第一段:
函数首先对_WIN64宏进行判断,_WIN64是一个预定义宏,当编译目标平台为64位时,此宏会被定义。如果此代码运行并且_WIN64被定义,则意味着运行此代码的进程是一个64位进程,在Windows系统上,一个64位进程仅能在64位操作系统上运行,故如果在当前编译环境下_WIN64宏被定义,则此函数返回TRUE。
第二段:
当代码进入第二段,表明了运行此代码的进程是一个32位进程。代码的第二段首先尝试从kernel32.dll中获取IsWow64Process函数的地址,如果获取失败,表示当前系统的kernel32.dll中并没有IsWow64Process这一函数,表明当前系统为32位系统。如果函数获取成功,则调用IsWow64Process函数。
MSDN解释
下面我们看看MSDN上关于IsWow64Process函数的解释:
Determines whether the specified process is running under WOW64.
这里的WOW64是Windows上提供的一种机制,用来在64位系统上运行32位进程。具体解释如下:
WOW64 is the x86 emulator that allows 32-bit Windows-based applications to run seamlessly on 64-bit Windows. This allows for 32-bit (x86) Windows applications to run seamlessly in 64-bit (x64) Windows, as well as for 32-bit (x86) and 32-bit (ARM) Windows applications to run seamlessly in 64-bit (ARM64) Windows. WOW64 is provided with the operating system and does not have to be explicitly enabled.
我们在具体看一下这个函数的第二个参数的描述:
Wow64Process [out]
A pointer to a value that is set to TRUE if the process is running under WOW64. If the process is running under 32-bit Windows, the value is set to FALSE. If the process is a 64-bit application running under 64-bit Windows, the value is also set to FALSE.
如果当前进程运行在WOW64,意味着当前进程是一个32位进程并运行在支持WOW64的64位系统上,则此参数设置为TRUE。
如果当前进程运行在32位系统上,则此参数设置为FALSE,也即当前系统是32位系统,不是64位系统。
如果当前进程是一个64位进程并运行在64位系统下,则此参数设置为FALSE,也即当前系统是64位系统。
所以,通过IsWow64Process函数,我们基本可以确认当前运行的系统的位数了。
另外,如果IsWow64Process获取成功但是调用失败,这里仅仅弹出一个错误对话框。标准做法是调用GetLastError来获取错误原因并记录错误日志,这里就不再展开了。
总结
历史的车轮不断往前,桌面环境中的64位系统也将慢慢的取代32位,某一天,以上的代码,也随着时代的前进而变得毫无意义了,有时候想想,也是很凄凉的一件事儿。