2011-03-26 91 views
0

我正在使用基於Qt 4.7.0(32位)的Qt Creator 2.0.1。操作系統是Windows 7旗艦版(32位)。爲什麼Windows 7機器上Qt Creator中的_WIN32_WINNT == 0x400?

我想使用下面的函數調用來重新啓動Windows:

ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_SYSTEM | 
          SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY); 

我添加WINDOWS.H和reason.h的源代碼,並在*的LIBS部分添加libuser32的.pro文件。

編譯完代碼後,Qt Creator發出錯誤,說明SHTDN_REASON_MAJOR_SYSTEMSHTDN_REASON_MINOR_NETWORK_CONNECTIVITY未在範圍中定義。

我查看了mingw附帶的reason.h文件。我發現#define s爲一個#if內:

#if (_WIN32_WINNT >= 0x0501) 

我看着的出現_WIN32_WINNT值設定爲1024(0x400的)。

我知道這代表某種版本號,那些#define應該在特定版本後編譯。但是爲什麼_WIN32_WINNT在Windows 7上如此之低?我如何使用這些#define?我不想把直接的價值,而不是SHTDN_REASON_MAJOR_SYSTEMSHTDN_REASON_MINOR_NETWORK_CONNECTIVITY

回答

7

_WIN32_WINNT的值表示您正在編譯的Win32 API的版本。它與您在構建過程中碰巧使用的操作系統版本無關。

如果包括API頭文件的詳細的API函數和定義將變得可用,但利用這些功能可能會導致應用程序拒絕對以前版本的Windows運行之前將其設置爲一個較高的值。通常情況下,您想使用可以逃脫的最低值。

它是安全的,只要你檢查從Win32函數表示該值是不支持的錯誤使用#define值從更高的API版本。但是,使用Win32函數會導致應用程序在啓動時失敗,並顯示「找不到DLL導入」等錯誤。

+2

0x0501的意思是XP,它在mingw,因爲有兩個插件與資源管理器。但是WINNT通常被定義爲4(Windows 2000),因爲很多代碼只是用它來區分成長窗口(w2k)和嬰兒窗口(win95/98)。你可以只取出測試,如果你喜歡或定義WINNT到501 – 2011-03-26 06:07:13

+2

@馬丁貝克特Win2000的不是4.4是NT 4 Win2000的是5.0和XP是5.1(像你說的)。但這與蒂姆的觀點有點相似。 – Fredrik 2011-03-26 06:18:05

+1

是的,4的winver是寶寶窗戶! – 2011-03-26 07:57:41

相關問題