Windows ヘッダーの使用
Windows API のヘッダー ファイルを使用すると、32 ビットと 64 ビットのアプリケーションを作成できます。 これには、Unicode バージョンと ANSI バージョンの両方の API の宣言が含まれます。 詳細については、Windows API の Unicode を参照してください。 1 つのソース コード ベースからアプリケーションの 32 ビット バージョンと 64 ビット バージョンの両方をビルドできる データ型 を使用します。 詳細については、「64 ビット Windowsの準備」を参照してください。 その他の機能には 、ヘッダー注釈 と STRICT 型チェックが含まれます。
- Visual C++ と Windows ヘッダー ファイル
- 条件付き宣言のマクロ
- WINVER または _WIN32_WINNTの設定
- 構造パッキングの制御
- より小さいヘッダー ファイルを使用したビルドの高速化
- 関連トピック
Visual C++ と Windows ヘッダー ファイル
Microsoft Visual C++には、Visual C++ がリリースされた時点で現在のWindows ヘッダー ファイルのコピーが含まれています。 したがって、更新されたヘッダー ファイルを SDK からインストールすると、コンピューターに複数のバージョンのWindows ヘッダー ファイルがインストールされる可能性があります。 最新バージョンの SDK ヘッダー ファイルを使用していることを確認しないと、Visual C++ がリリースされた後に導入された機能を使用するコードをコンパイルするときに、次のエラー コードが表示されます。エラー C2065: 宣言されていない識別子。
条件付き宣言のマクロ
特定のバージョンのWindowsに依存する特定の関数は、条件付きコードを使用して宣言されます。 これにより、コンパイラを使用して、アプリケーションがターゲット バージョンのWindowsでサポートされていない関数を使用しているかどうかを検出できます。 これらの関数を使用するアプリケーションをコンパイルするには、適切なマクロを定義する必要があります。 それ以外の場合は、C2065 エラー メッセージが表示されます。
Windowsヘッダー ファイルでは、マクロを使用して、多くのプログラミング要素をサポートするバージョンのWindowsを示します。 したがって、各メジャー オペレーティング システム リリースで導入された新機能を使用するには、これらのマクロを定義する必要があります。 (個々のヘッダー ファイルで異なるマクロが使用される場合があるため、コンパイルの問題が発生した場合は、定義に含まれるヘッダー ファイルで条件付き定義を確認してください)。詳細については、「SdkDdkVer.h」を参照してください。
次の表では、Windows ヘッダー ファイルで使用される推奨されるマクロについて説明します。 NTDDI_VERSIONを定義する場合は、_WIN32_WINNTも定義する必要があります。
| 最小システムが必要 | 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 "しきい値 2" | NTDDI_WIN10_TH2 (0x0A000001) |
| Windows 10 1507 "Threshold" | 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 Service Pack 1 (SP1) | NTDDI_VISTASP1 (0x06000100) |
| Windows Vista | NTDDI_VISTA (0x06000000) |
| Windows Server 2003 Service Pack 2 (SP2) | NTDDI_WS03SP2 (0x05020200) |
| Windows Server 2003 Service Pack 1 (SP1) | NTDDI_WS03SP1 (0x05020100) |
| Windows Server 2003 | NTDDI_WS03 (0x05020000) |
| Windows XP Service Pack 3 (SP3) | NTDDI_WINXPSP3 (0x05010300) |
| Windows XP Service Pack 2 (SP2) | NTDDI_WINXPSP2 (0x05010200) |
| Service Pack 1 (SP1) を使用した XP のWindows | NTDDI_WINXPSP1 (0x05010100) |
| Windows XP | NTDDI_WINXP (0x05010000) |
次の表では、Windows ヘッダー ファイルで使用されるその他のマクロについて説明します。
| 最小システムが必要 | _WIN32_WINNTと 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) |
| SP1 Windows Server 2003、SP2 Windows XP | _WIN32_WINNT_WS03 (0x0502) |
| Windows Server 2003、Windows XP | _WIN32_WINNT_WINXP (0x0501) |
| 最小バージョンが必要 | _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) |
WINVER または _WIN32_WINNTの設定
これらのシンボルを定義するには、各ソース ファイルで #define ステートメントを使用するか、Visual C++ でサポートされている /D コンパイラ オプションを指定します。
たとえば、ソース ファイルに WINVER を設定するには、次のステートメントを使用します。
#define WINVER 0x0502
ソース ファイルで_WIN32_WINNTを設定するには、次のステートメントを使用します。
#define _WIN32_WINNT 0x0502
/D コンパイラ オプションを使用して_WIN32_WINNTを設定するには、次のコマンドを使用します。
cl -c /D_WIN32_WINNT=0x0502source.cpp
/D コンパイラ オプションの使用については、 /D (プリプロセッサ定義) を参照してください。
最新バージョンのWindowsで導入された一部の機能は、以前のバージョンのWindowsのサービス パックに追加される可能性があることに注意してください。 したがって、サービス パックを対象にするには、次のメジャー オペレーティング システム リリースの値を使用して_WIN32_WINNTを定義する必要がある場合があります。 たとえば、GetDllDirectory 関数は Windows Server 2003 で導入され、_WIN32_WINNTが0x0502以上の場合は条件付きで定義されます。 この関数は、SP1 を使用Windows XP にも追加されました。 したがって、Windows XP をターゲットに0x0501として_WIN32_WINNTを定義する場合は、SP1 で Windows XP で定義されている機能が見逃されます。
構造パッキングの制御
プロジェクトは、既定の構造体パッキングを使用するようにコンパイルする必要があります。最大整数型は 8 バイトであるため、現在は 8 バイトです。 これにより、ヘッダー ファイル内のすべての構造体型が、Windows API で想定されているのと同じアラインメントでアプリケーションにコンパイルされます。 また、8 バイト値を持つ構造体が適切にアラインされ、データの配置を強制するプロセッサでアラインメント エラーが発生しないようにします。
詳細については、 /Zp (構造体メンバーの配置) または パックに関するページを参照してください。
より小さいヘッダー ファイルを使用したビルドの高速化
次のように、あまり一般的でない API 宣言の一部を除外することで、Windows ヘッダー ファイルのサイズを小さくできます。
暗号化、DDE、RPC、シェル、Windows ソケットなどの API を除外するWIN32_LEAN_AND_MEANを定義します。
#define WIN32_LEAN_AND_MEANAPI を除外する 1 つ以上の NOapi シンボルを定義します。 たとえば、NOCOMM はシリアル通信 API を除外します。 サポート NOapi シンボルの一覧については、Windows.h を参照してください。
#define NOCOMM
関連トピック