2013-03-22 174 views
-1

我知道64位應用程序需要64位Windows。Windows 64位和32位不兼容性

哪些c/C++代碼只能用於64位或32位? 編輯:I have found it here

我能確定運行proccess字大小:就像我將有32位應用程序,它的回報,如果操作系統是32位或64位,然後運行右字大小子/新proccess。

+0

它不被稱爲「bittage」,而是「字的大小」......並且您編譯了C(或C++)代碼32位或64位字大小... – 2013-03-22 18:52:55

+0

通常決定運行32位或64位版本的程序是在安裝時進行的,您可以根據需要安裝,然後將其他程序保留。無需在運行時做出決定。 – 2013-03-22 18:58:11

+0

我想知道它是否可以完成,而且我最感興趣的是是否存在一些不兼容的部分 – Coze 2013-03-22 19:05:31

回答

3

你可以看看你的系統是32位還是64位,其中GetNativeSystemInfo。例如,你可以做這樣的事情:

typedef void (WINAPI *GetNativeSystemInfo_t)(LPSYSTEM_INFO lpSystemInfo); 

BOOL IsSystem64Bit() 
{ 
    HANDLE kernel32 = LoadLibrary("kernel32.dll"); 
    SYSTEM_INFO si; 

    GetNativeSystemInfo_t GetNativeSystemInfoPtr 
     = (GetNativeSystemInfo_t)GetProcAddress(kernel32, "GetNativeSystemInfo"); 

    if (GetNativeSystemInfoPtr == NULL) 
     return FALSE; 

    GetNativeSystemInfoPtr(&si); 
    return (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64); 
} 

究其原因,功能動態解析是因爲它沒有在之前的Windows XP的版本存在。 (在這些版本的Windows上,我們已經知道該系統不是64位的)

-1

我不確定Windows的情況,顯然這會受到幫助,但在Linux上,您可以在運行時確定字的大小。長int將是字的大小。在64位Linux上,32位Linux上長64位和32位。

所以,這似乎真的愚蠢和不一致的,但你可以不喜歡

char ws[3]; 
sprintf(ws, "%d", sizeof(long)); 
fprintf(stderr, "%s\n", ws); 

的東西,然後你可以用不同的值進行比較ws看字的大小是什麼。我相信Windows有一個可以幫助你分辨字大小的基本類型。

+0

'long'的大小沒有綁定到操作系統類型,因此它不必是64位Linux上的8個字節和32位Linux上的4個字節:http://stackoverflow.com/questions/10040123/long-type-64bit-linux – SomeWittyUsername 2013-03-22 19:14:57

+0

你的答案在所有平臺上都不是這樣。實際上'sizeof(int *)'更正確 – 2013-12-18 12:31:20