如何在C++;windows是32位还是64位? 如何检测C++是Windows 32或64位? 我在.NET中看到了很多例子,但是我需要C++。另外,IsWow64Process()对我不起作用,因为“如果进程在32位窗口下运行,则该值设置为FALSE。如果进程是在64位窗口下运行的64位应用程序,则该值也设置为FALSE”

如何在C++;windows是32位还是64位? 如何检测C++是Windows 32或64位? 我在.NET中看到了很多例子,但是我需要C++。另外,IsWow64Process()对我不起作用,因为“如果进程在32位窗口下运行,则该值设置为FALSE。如果进程是在64位窗口下运行的64位应用程序,则该值也设置为FALSE”,c++,windows,winapi,visual-c++,C++,Windows,Winapi,Visual C++,如果我在32位操作系统下有32位proc,我就有FALSE 如果在64位操作系统下有64位proc,则为FALSE 但是我不关心进程位,我需要操作系统位,用于检测底层系统信息的Win32 API函数是。调用函数并读取函数填充的结构的wProcessorArchitecture成员 尽管实际上可以使用iswow64进程来检测这一点。如果调用IsWow64Process并返回TRUE,则您知道您正在64位系统上运行。否则,将返回FALSE。然后你只需要测试一个指针的大小,例如。32位指针表示32位系

如果我在32位操作系统下有32位proc,我就有FALSE 如果在64位操作系统下有64位proc,则为FALSE


但是我不关心进程位,我需要操作系统位,用于检测底层系统信息的Win32 API函数是。调用函数并读取函数填充的结构的
wProcessorArchitecture
成员

尽管实际上可以使用
iswow64进程
来检测这一点。如果调用
IsWow64Process
并返回
TRUE
,则您知道您正在64位系统上运行。否则,将返回
FALSE
。然后你只需要测试一个指针的大小,例如。32位指针表示32位系统,64位指针表示64位系统。事实上,您可能可以从编译器提供的条件中获取信息,这取决于您使用的编译器,因为指针的大小在编译时是已知的

陈雷蒙(Raymond Chen)在一篇文章中描述了这种方法。他很有帮助地包含了我在这里复制的代码:

BOOL Is64BitWindows()
{
#if defined(_WIN64)
 return TRUE;  // 64-bit programs run only on Win64
#elif defined(_WIN32)
 // 32-bit programs run on both 32-bit and 64-bit Windows
 // so must sniff
 BOOL f64 = FALSE;
 return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
 return FALSE; // Win64 does not support Win16
#endif
}

另一种方法是检查系统分区上是否存在“Program Files(x86)”根文件夹。它将出现在x64 windows安装上,而不是x86安装上。


检索WOW64使用的系统目录的路径。32位Windows上不存在此目录。

为什么最后一个“&&f64”?看起来编译器可以将整行优化为“return false”,因为“A&&false”为false。@vz0否,对
IsWow64Process()
的调用修改
f64
@vz0:
IsWow64Process()
返回TRUE/false以指示
BOOL
变量是否已更新。如果为TRUE,则该变量指示请求的进程是否为WOW64进程(32位在64位上运行)。这就是需要额外检查的原因:
return((查询成功)&&(查询结果为true))在我看来像是未定义的行为。它是?我的C++-std-fu是wasted@vz0不,C++逻辑操作符用短路来评估左到右,这绝对不可靠。该文件夹可能有其他语言的其他名称,也可以很容易地找到该文件夹的路径changed@phuclv关于其他语言的观点很好,但是路径不能轻易改变。如果您认为可以,请提供参考。