如何在C++;windows是32位还是64位? 如何检测C++是Windows 32或64位? 我在.NET中看到了很多例子,但是我需要C++。另外,IsWow64Process()对我不起作用,因为“如果进程在32位窗口下运行,则该值设置为FALSE。如果进程是在64位窗口下运行的64位应用程序,则该值也设置为FALSE”
如果我在32位操作系统下有32位proc,我就有FALSE 如果在64位操作系统下有64位proc,则为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位系
但是我不关心进程位,我需要操作系统位,用于检测底层系统信息的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关于其他语言的观点很好,但是路径不能轻易改变。如果您认为可以,请提供参考。