有一个Windows API调用,会告诉我,如果我在64位操作系统上运行?

有一个Windows API调用,会告诉我,如果我在64位操作系统上运行? 我有一些遗留的c ++代码,它会调用GetVersionEx来填充OSVERSIONINFO结构,但这只会告诉我(AFAIK)操作系统(Vista,V7等),而不是处理体系结构。 我可以通过简单地寻找“C:\ Program Files(x86)…”的存在,但这似乎是丑陋的。 我确定必须有一个API来返回这个信息。

IsWow64Process可能是你正在寻找的。

GetNativeSystemInfo()

我发现这个帖子,似乎提供了一个很好的答案: 检测当前的Windows版本是32位还是64位

我不知道为什么当我在发布之前搜索堆栈溢出没有出现。

顺便说一句,对我来说最好的解决方案是简单地检查ProgramW6432环境变量。

解决方案非常简单。 如果您正在编译64位版本,则您已经知道您正在运行64位版本的Windows。 所以在编译32位时只需要调用IsWow64Process 。 如果在64位版本的Windows上运行,则以下实现返回true

 bool Is64BitPlatform() { #if defined(_WIN64) return true; // 64-bit code implies a 64-bit OS #elif defined(_WIN32) // 32-bit code runs on a 64-bit OS, if IsWow64Process returns TRUE BOOL f = FALSE; return ::IsWow64Process(GetCurrentProcess(), &f) && f; #else #error Unexpected platform. #endif } 

这回答你问的问题。 您应该问的问题的答案已经发布在Jerry Coffin的回复中 :只需调用GetNativeSystemInfo即可 。