c ++ - Hvorfor \_WIN32\_WINNT == 0x400 i Qt Creator på Windows 7 maskine?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger Qt Creator 2.0.1 baseret på Qt 4.7.0 (32 bit). OS er Windows 7 Ultimate (32 bit).


Jeg vil gerne genstarte Windows ved hjælp af følgende funktionsopkald:


ExitWindowsEx(EWX\_REBOOT, SHTDN\_REASON\_MAJOR\_SYSTEM |
                          SHTDN\_REASON\_MINOR\_NETWORK\_CONNECTIVITY);


Jeg har tilføjet windows.h og reason.h i kildekoden og tilføjet libuser32 i LIBS sektionen af ​​* .pro fil.


Efter udarbejdelsen af ​​koden udsteder Qt Creator en fejl, der siger SHTDN\_REASON\_MAJOR\_SYSTEM og SHTDN\_REASON\_MINOR\_NETWORK\_CONNECTIVITY, ikke defineret i anvendelsesområdet.


Jeg kiggede på reason.h fil, der følger med mingw. Jeg fandt #define s er inde i en #if:


#if (\_WIN32\_WINNT >= 0x0501)


Jeg undersøgte værdien af ​​\_WIN32\_WINNT, som synes at være 1024 (0x400).


Jeg forstår, at dette repræsenterer en slags versionsnummer, og de #define s skal kompileres efter en bestemt version. Men hvorfor \_WIN32\_WINNT er så lav på Windows 7? Hvordan kan jeg bruge disse #define s? Jeg vil ikke sætte direkte værdier i stedet for SHTDN\_REASON\_MAJOR\_SYSTEM og SHTDN\_REASON\_MINOR\_NETWORK\_CONNECTIVITY.

Bedste reference


Værdien af ​​\_WIN32\_WINNT angiver den version af Win32 API, du kompilerer imod. Det har intet at gøre med den version af det operativsystem, du tilfældigvis bruger, mens du laver bygningen.


Hvis du indstiller dette til en højere værdi, før du inkluderer API-headerfilerne, bliver flere API-funktioner og -definitioner tilgængelige, men ved at bruge disse funktioner kan din ansøgning nægte at køre på tidligere versioner af Windows. Normalt vil du bruge den laveste værdi, du kan komme væk med.


Det er sikkert at bruge #define værdier fra højere API-versioner, så længe du kontrollerer for fejl fra Win32-funktioner, der angiver, at værdien ikke understøttes. Brug af Win32-funktioner vil dog medføre, at din applikation mislykkes ved opstart med fejl som 'DLL import ikke fundet'.