2013-07-28 160 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

相關問題