2
这是一个相当受欢迎的问题,但所有的答案几乎都说:“使用IsWow64Process函数”。如果应用程序是64位的,则返回FALSE。我想要一个适用于任何应用程序的解决方案。检测C++应用程序是在32位还是在64位Windows上运行
这是一个相当受欢迎的问题,但所有的答案几乎都说:“使用IsWow64Process函数”。如果应用程序是64位的,则返回FALSE。我想要一个适用于任何应用程序的解决方案。检测C++应用程序是在32位还是在64位Windows上运行
创建一个函数,为32位进程调用Win32 API函数IsWow64Process()
,并为64位进程返回true
。
bool is_64bit(void)
{
#if defined(_WIN64)
return true; // 64-bit programs run only on Win64
#elif defined(_WIN32)
BOOL f64 = FALSE;
return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#endif
}
的
你的'#if' ...'#elif' ...'#endif'不包含'#else'子句。这是故意的吗?在这种特殊情况下,如果没有定义预处理器符号,编译器会发出错误。一般来说,我更喜欢明确地在这种情况下使用'#error'预处理器指令。 – IInspectable
可能重复[如何检测Windows 64位平台的.NET?](http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform- with-net) –
@AhmedMasud:你知道.NET和C++/WinAPI的区别吗? –
这确实属于“你怎么不知道”的范畴。您在项目中对目标x64进行了非常具体的配置更改。另一个定义宏并没有什么不同,并且非常便于携带。在代码中使用类似sizeof(void *)的东西也不完全是黑客,编译器会在编译时对其进行分类,以便优化代码块。或者使用预定义的编译器宏,如_WIN64。 –