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。 –