Menggunakan Header Windows

File header untuk Windows API memungkinkan Anda membuat aplikasi 32 dan 64-bit. Mereka termasuk deklarasi untuk versi Unicode dan ANSI dari API. Untuk informasi selengkapnya, lihat Unicode di Windows API. Mereka menggunakan jenis data yang memungkinkan Anda membangun versi 32 dan 64-bit aplikasi Anda dari satu basis kode sumber. Untuk informasi selengkapnya, lihat Menyiapkan Windows 64-bit. Fitur tambahan termasuk Anotasi Header dan Pemeriksaan Jenis STRICT.

Visual C++ dan File Header Windows

Microsoft Visual C++ menyertakan salinan file header Windows yang saat ini ada pada saat Visual C++ dirilis. Oleh karena itu, jika Anda menginstal file header yang diperbarui dari SDK, Anda mungkin berakhir dengan beberapa versi file header Windows di komputer Anda. Jika Anda tidak memastikan bahwa Anda menggunakan versi terbaru file header SDK, Anda akan menerima kode kesalahan berikut saat mengompilasi kode yang menggunakan fitur yang diperkenalkan setelah Visual C++ dirilis: kesalahan C2065: pengidentifikasi tidak dinyatakan.

Makro untuk Deklarasi Bersyarat

Fungsi tertentu yang bergantung pada versi Windows tertentu dinyatakan menggunakan kode bersyarat. Ini memungkinkan Anda menggunakan pengkompilasi untuk mendeteksi apakah aplikasi Anda menggunakan fungsi yang tidak didukung pada versi target Windows. Untuk mengkompilasi aplikasi yang menggunakan fungsi ini, Anda harus menentukan makro yang sesuai. Jika tidak, Anda akan menerima pesan kesalahan C2065.

File header Windows menggunakan makro untuk menunjukkan versi Windows mana yang mendukung banyak elemen pemrograman. Oleh karena itu, Anda harus menentukan makro ini untuk menggunakan fungsionalitas baru yang diperkenalkan dalam setiap rilis sistem operasi utama. (File header individual dapat menggunakan makro yang berbeda; oleh karena itu, jika masalah kompilasi terjadi, periksa file header yang berisi definisi untuk definisi kondisional.) Untuk informasi selengkapnya, lihat SdkDdkVer.h.

Tabel berikut ini menjelaskan makro pilihan yang digunakan dalam file header Windows. Jika Anda menentukan NTDDI_VERSION, Anda juga harus menentukan _WIN32_WINNT.

Sistem minimum diperlukan Nilai untuk NTDDI_VERSION
Windows 10 1903 "19H1" NTDDI_WIN10_19H1 (0x0A000007)
Windows 10 1809 "Redstone 5" NTDDI_WIN10_RS5 (0x0A000006)
Windows 10 1803 "Redstone 4" NTDDI_WIN10_RS4 (0x0A000005)
Windows 10 1709 "Redstone 3" NTDDI_WIN10_RS3 (0x0A000004)
Windows 10 1703 "Redstone 2" NTDDI_WIN10_RS2 (0x0A000003)
Windows 10 1607 "Redstone 1" NTDDI_WIN10_RS1 (0x0A000002)
Windows 10 1511 "Ambang 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Ambang" NTDDI_WIN10 (0x0A000000)
Windows 8.1 NTDDI_WINBLUE (0x06030000)
Windows 8 NTDDI_WIN8 (0x06020000)
Windows 7 NTDDI_WIN7 (0x06010000)
Windows Server 2008 NTDDI_WS08 (0x06000100)
Windows Vista dengan Paket Layanan 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 dengan Paket Layanan 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 dengan Paket Layanan 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP dengan Paket Layanan 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP dengan Paket Layanan 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP dengan Paket Layanan 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

Tabel berikut ini menjelaskan makro lain yang digunakan dalam file header Windows.

Sistem minimum diperlukan Nilai minimum untuk _WIN32_WINNT dan WINVER
Windows 10 _WIN32_WINNT_WIN10 (0x0A00)
Windows 8.1 _WIN32_WINNT_WINBLUE (0x0603)
Windows 8 _WIN32_WINNT_WIN8 (0x0602)
Windows 7 _WIN32_WINNT_WIN7 (0x0601)
Windows Server 2008 _WIN32_WINNT_WS08 (0x0600)
Windows Vista _WIN32_WINNT_VISTA (0x0600)
Windows Server 2003 dengan SP1, Windows XP dengan SP2 _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

 

Versi minimum diperlukan Nilai minimum _WIN32_IE
Internet Explorer 11.0 _WIN32_IE_IE110 (0x0A00)
Internet Explorer 10.0 _WIN32_IE_IE100 (0x0A00)
Internet Explorer 9.0 _WIN32_IE_IE90 (0x0900)
Internet Explorer 8.0 _WIN32_IE_IE80 (0x0800)
Internet Explorer 7.0 _WIN32_IE_IE70 (0x0700)
Internet Explorer 6.0 SP2 _WIN32_IE_IE60SP2 (0x0603)
Internet Explorer 6.0 SP1 _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5.5 _WIN32_IE_IE55 (0x0550)
Internet Explorer 5.01 _WIN32_IE_IE501 (0x0501)
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE_IE50 (0x0500)

 

Mengatur WINVER atau _WIN32_WINNT

Anda dapat menentukan simbol-simbol ini dengan menggunakan pernyataan #define di setiap file sumber, atau dengan menentukan opsi pengkompilasi /D yang didukung oleh Visual C++.

Misalnya, untuk mengatur WINVER di file sumber Anda, gunakan pernyataan berikut:

#define WINVER 0x0502

Untuk mengatur _WIN32_WINNT dalam file sumber Anda, gunakan pernyataan berikut:

#define _WIN32_WINNT 0x0502

Untuk mengatur _WIN32_WINNT menggunakan opsi pengkompilasi /D, gunakan perintah berikut:

cl -c /D_WIN32_WINNT=0x0502source.cpp

Untuk informasi tentang menggunakan opsi pengkompilasi /D, lihat /D (definisi pra-prosesor).

Perhatikan bahwa beberapa fitur yang diperkenalkan dalam versi terbaru Windows dapat ditambahkan ke paket layanan untuk versi Windows sebelumnya. Oleh karena itu, untuk menargetkan paket layanan, Anda mungkin perlu menentukan _WIN32_WINNT dengan nilai untuk rilis sistem operasi utama berikutnya. Misalnya, fungsi GetDllDirectory diperkenalkan di Windows Server 2003 dan ditentukan secara kondisional jika _WIN32_WINNT 0x0502 atau lebih besar. Fungsi ini juga ditambahkan ke Windows XP dengan SP1. Oleh karena itu, jika Anda mendefinisikan _WIN32_WINNT sebagai 0x0501 untuk menargetkan Windows XP, Anda akan kehilangan fitur yang didefinisikan dalam Windows XP dengan SP1.

Pengontrol Pengemasan Struktur

Proyek harus dikompilasi untuk menggunakan pengemasan struktur default, yang saat ini 8 byte karena jenis integral terbesar adalah 8 byte. Melakukannya memastikan bahwa semua jenis struktur dalam file header dikompilasi ke dalam aplikasi dengan perataan yang sama yang diharapkan WINDOWS API. Ini juga memastikan bahwa struktur dengan nilai 8-byte diselaraskan dengan benar dan tidak akan menyebabkan kesalahan penyelarasan pada prosesor yang menegakkan penyelarasan data.

Untuk informasi selengkapnya, lihat /Zp (struct member alignment) atau pack.

Build Yang Lebih Cepat dengan File Header yang Lebih Kecil

Anda dapat mengurangi ukuran file header Windows dengan mengecualikan beberapa deklarasi API yang kurang umum sebagai berikut:

  • Tentukan WIN32_LEAN_AND_MEAN untuk mengecualikan API seperti Kriptografi, DDE, RPC, Shell, dan Windows Sockets.

    #define WIN32_LEAN_AND_MEAN

  • Tentukan satu atau beberapa simbol NOapi untuk mengecualikan API. Misalnya, NOCOMM mengecualikan API komunikasi serial. Untuk daftar dukungan simbolAPI NO, lihat Windows.h.

    #define NOCOMM

Situs unduhan Windows SDK