Qt中判斷windows系統位元

來源:互聯網
上載者:User

標籤:api   運行   結構   size   als   wow   變數   mem   一個   

因為要通過對系統位元的判斷,來決定程式中不同的操作。

最開始想到Qt中是否有封裝好的類,發現了QSysInfo類可以為我們提供一些有關當前系統的底層資訊。在QSysInfo類中 QSysInfo::WordSize 可以返回“編譯應用程式的平台的指標大小(32或64)”。但是在實際使用過程中,發現其返回的32或64是根據編譯器決定的,若編譯成32位即返回32,63位即返回64。

所以只能使用windows系統函數來判斷當前系統內容,在Windows系統函數中有一個IsWow64Process function,可使用確定指定的進程是否在WOW64下運行。但官方明確說明:

為了與不支援此功能的作業系統相容,請調用 GetProcAddress來檢測是否 在Kernel32.dll中實現了IsWow64Process。如果GetProcAddress成功,則調用此函數是安全的。否則,WOW64不存在。請注意,此技術不是檢測作業系統是否為64位版本的Windows的可靠方法,因為目前的版本的32位Windows中的Kernel32.dll也包含此功能。

所以使用 GetProcAddress function,此方法可以從指定的動態連結程式庫(DLL)中檢索匯出的函數或變數的地址。在Kernel32.dll中有一個GetNativeSystemInfo function可以檢索有關當前系統的資訊,向改函數中傳入一個SYSTEM_INFO structure,在改結構體中包含了處理器體繫結構(wProcessorArchitecture屬性)可以是:PROCESSOR_ARCHITECTURE_AMD64、PROCESSOR_ARCHITECTURE_ARM、PROCESSOR_ARCHITECTURE_ARM64、PROCESSOR_ARCHITECTURE_IA64、PROCESSOR_ARCHITECTURE_INTEL、PROCESSOR_ARCHITECTURE_UNKNOWN這些值中的一個,所以可以根據這些值來判斷系統是否為64位。

具體代碼如下:

 1 BOOL Is64BitSystem() 2 { 3     typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); 4     PGNSI pGNSI; 5     SYSTEM_INFO si; 6     ZeroMemory(&si, sizeof(SYSTEM_INFO)); 7     pGNSI =(PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); 8     if (pGNSI) 9     {10         pGNSI(&si);11 12         if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||13             si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ||14             si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64)15         {16             return TRUE;17         }18     }19     return FALSE;20 }

 

Qt中判斷windows系統位元

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.