2013-07-28 127 views
2

这是一个相当受欢迎的问题,但所有的答案几乎都说:“使用IsWow64Process函数”。如果应用程序是64位的,则返回FALSE。我想要一个适用于任何应用程序的解决方案。检测C++应用程序是在32位还是在64位Windows上运行

+0

可能重复[如何检测Windows 64位平台的.NET?](http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform- with-net) –

+3

@AhmedMasud:你知道.NET和C++/WinAPI的区别吗? –

+1

这确实属于“你怎么不知道”的范畴。您在项目中对目标x64进行了非常具体的配置更改。另一个定义宏并没有什么不同,并且非常便于携带。在代码中使用类似sizeof(void *)的东西也不完全是黑客,编译器会在编译时对其进行分类,以便优化代码块。或者使用预定义的编译器宏,如_WIN64。 –

回答

5

创建一个函数,为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 
} 
+2

你的'#if' ...'#elif' ...'#endif'不包含'#else'子句。这是故意的吗?在这种特殊情况下,如果没有定义预处理器符号,编译器会发出错误。一般来说,我更喜欢明确地在这种情况下使用'#error'预处理器指令。 – IInspectable

相关问题