如何在 C 上检测是 windows 32 还是 64 位?

新手上路,请多包涵

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

如果我在 32 位操作系统下有 32 位 proc 我有 FALSE 如果我在 64 位操作系统下有 64 位 proc 我有 FALSE

但我不关心进程位我需要操作系统位

原文由 Ted 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 689
1 个回答

检测底层系统信息的 Win32 API 函数是 GetNativeSystemInfo 。调用函数并读取函数填充的 SYSTEM_INFO 结构的 wProcessorArchitecture 成员。

虽然实际上可以使用 IsWow64Process 来检测这一点。如果您调用 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
}

原文由 David Heffernan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题