Bagikan melalui


Perbarui WINVER dan _WIN32_WINNT

Saat Anda menggunakan Windows SDK, Anda dapat menentukan versi Windows mana yang dapat dijalankan kode Anda. Makro praprosesor WINVER dan _WIN32_WINNT menentukan versi sistem operasi minimum yang didukung kode Anda. Visual Studio dan pengkompilasi Microsoft C++ mendukung penargetan Windows 7 SP1 dan yang lebih baru. Toolset lama mencakup dukungan untuk Windows XP SP2, Windows Server 2003 SP1, Vista, dan Windows Server 2008. Windows 95, Windows 98, Windows ME, Windows NT, dan Windows 2000 tidak didukung.

Saat meningkatkan proyek lama, Anda mungkin perlu memperbarui WINVER atau makro _WIN32_WINNT . Jika nilai ditetapkan untuk versi Windows yang tidak didukung, Anda mungkin melihat kesalahan kompilasi yang terkait dengan makro ini.

Keterangan

Untuk mengubah makro, dalam file header (misalnya, di targetver.h, yang disertakan oleh beberapa templat proyek yang menargetkan Windows), tambahkan baris berikut.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

Makro dalam contoh diatur untuk menargetkan setiap versi sistem operasi Windows 10. Nilai yang mungkin tercantum dalam file header Windows sdkddkver.h, yang menentukan makro untuk setiap versi Windows utama. Untuk membangun aplikasi Anda untuk mendukung platform Windows sebelumnya, sertakan WinSDKVer.h. Kemudian, atur WINVER dan _WIN32_WINNT makro ke platform terlama yang didukung sebelum menyertakan sdkddkver.h. Berikut adalah baris dari sdkddkver.h versi Windows 10 SDK yang mengodekan nilai untuk setiap versi utama Windows:

//
// _WIN32_WINNT version constants
//
#define _WIN32_WINNT_NT4                    0x0400 // Windows NT 4.0
#define _WIN32_WINNT_WIN2K                  0x0500 // Windows 2000
#define _WIN32_WINNT_WINXP                  0x0501 // Windows XP
#define _WIN32_WINNT_WS03                   0x0502 // Windows Server 2003
#define _WIN32_WINNT_WIN6                   0x0600 // Windows Vista
#define _WIN32_WINNT_VISTA                  0x0600 // Windows Vista
#define _WIN32_WINNT_WS08                   0x0600 // Windows Server 2008
#define _WIN32_WINNT_LONGHORN               0x0600 // Windows Vista
#define _WIN32_WINNT_WIN7                   0x0601 // Windows 7
#define _WIN32_WINNT_WIN8                   0x0602 // Windows 8
#define _WIN32_WINNT_WINBLUE                0x0603 // Windows 8.1
#define _WIN32_WINNT_WINTHRESHOLD           0x0A00 // Windows 10
#define _WIN32_WINNT_WIN10                  0x0A00 // Windows 10
// . . .

Untuk pendekatan penerapan versi yang lebih halus, Anda dapat menggunakan konstanta versi NTDDI di sdkddkver.h. Berikut adalah beberapa makro yang ditentukan oleh sdkddkver.h di Windows 10 SDK versi 10.0.18362.0:

//
// NTDDI version constants
//
#define NTDDI_WIN7                          0x06010000
#define NTDDI_WIN8                          0x06020000
#define NTDDI_WINBLUE                       0x06030000
#define NTDDI_WINTHRESHOLD                  0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10                         0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10_TH2                     0x0A000001  /* ABRACADABRA_WIN10_TH2 */
#define NTDDI_WIN10_RS1                     0x0A000002  /* ABRACADABRA_WIN10_RS1 */
#define NTDDI_WIN10_RS2                     0x0A000003  /* ABRACADABRA_WIN10_RS2 */
#define NTDDI_WIN10_RS3                     0x0A000004  /* ABRACADABRA_WIN10_RS3 */
#define NTDDI_WIN10_RS4                     0x0A000005  /* ABRACADABRA_WIN10_RS4 */
#define NTDDI_WIN10_RS5                     0x0A000006  /* ABRACADABRA_WIN10_RS5 */
#define NTDDI_WIN10_19H1                    0x0A000007  /* ABRACADABRA_WIN10_19H1*/

#define WDK_NTDDI_VERSION                   NTDDI_WIN10_19H1 /* ABRACADABRA_WIN10_19H1 */

//
// masks for version macros
//
#define OSVERSION_MASK      0xFFFF0000
#define SPVERSION_MASK      0x0000FF00
#define SUBVERSION_MASK     0x000000FF

//
// macros to extract various version fields from the NTDDI version
//
#define OSVER(Version)  ((Version) & OSVERSION_MASK)
#define SPVER(Version)  (((Version) & SPVERSION_MASK) >> 8)
#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )

Makro OSVER, SPVER, dan SUBVER dapat digunakan dalam kode Anda untuk mengontrol kompilasi kondisional untuk berbagai tingkat dukungan API.

Anda mungkin tidak melihat semua versi Windows ini tercantum dalam sdkddkver.h yang Anda lihat. Itu berarti Anda mungkin menggunakan versi Windows SDK yang lebih lama. (Jika Anda melihat lebih banyak, Anda mungkin melihat versi SDK yang lebih baru.) Secara default, proyek Windows baru di Visual Studio menggunakan Windows SDK terbaru yang dikirim dengan Visual Studio. Untuk menggunakan SDK yang lebih baru yang telah Anda instal secara terpisah, Anda harus mengatur Windows SDK secara eksplisit di properti proyek Anda.

Catatan

Nilai tidak dijamin berfungsi jika Anda menyertakan header MFC internal dalam aplikasi Anda.

Anda juga dapat menentukan makro ini dengan menggunakan /D opsi pengkompilasi. Untuk informasi selengkapnya, lihat /D (Definisi Pra-prosesor).

Untuk informasi selengkapnya tentang arti makro ini, lihat Menggunakan Header Windows.

Lihat juga

Riwayat perubahan Visual C++