Windows ヘッダーの使用

Windows API のヘッダー ファイルを使用すると、32 ビットと 64 ビットのアプリケーションを作成できます。 これには、Unicode バージョンと ANSI バージョンの両方の API の宣言が含まれます。 詳細については、「 Windows API の Unicode」を参照してください。 32 ビットバージョンと 64 ビット バージョンの両方のアプリケーションを 1 つのソース コード ベースからビルドできる データ型 を使用します。 詳細については、「 64 ビット Windows の準備」を参照してください。 その他の機能には 、ヘッダー注釈STRICT 型チェックが含まれます。

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 "しきい値" 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)
Windows XP with Service Pack 1 (SP1) 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)
Windows Server 2003 SP1、Windows XP (SP2) _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003、Windows XP _WIN32_WINNT_WINXP (0x0501)

 

最小バージョンが必要 _WIN32_IEの最小値
インターネット エクスプローラー 11.0 _WIN32_IE_IE110 (0x0A00)
インターネット エクスプローラー 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)
インターネット エクスプローラー 6.0 SP2 _WIN32_IE_IE60SP2 (0x0603)
インターネット エクスプローラー 6.0 SP1 _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5.5 _WIN32_IE_IE55 (0x0550)
インターネット エクスプローラー 5.01 _WIN32_IE_IE501 (0x0501)
インターネット エクスプローラー 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 にも追加されました。 したがって、_WIN32_WINNTを Windows XP をターゲットにする0x0501として定義すると、SP1 で Windows XP で定義されている機能が見逃されます。

構造パッキングの制御

プロジェクトは、既定の構造体パッキングを使用するようにコンパイルする必要があります。これは、最大の整数型が 8 バイトであるため、現在は 8 バイトです。 これにより、ヘッダー ファイル内のすべての構造体型が、Windows API で想定されているのと同じ配置でアプリケーションにコンパイルされます。 また、8 バイトの値を持つ構造体が適切に配置され、データの配置を強制するプロセッサでアラインメント エラーが発生しないようにします。

詳細については、「 /Zp (構造体メンバーの配置)」 または 「pack」を参照してください。

小さいヘッダー ファイルを使用したビルドの高速化

次のように、あまり一般的でない API 宣言の一部を除外することで、Windows ヘッダー ファイルのサイズを小さくできます。

  • 暗号化、DDE、RPC、シェル、Windows ソケットなどの API を除外するWIN32_LEAN_AND_MEANを定義します。

    #define WIN32_LEAN_AND_MEAN

  • API を除外する 1 つ以上の NOAPI シンボルを定義します。 たとえば、NOCOMM はシリアル通信 API を除外します。 サポート NOAPI シンボルの一覧については、「Windows.h」を参照してください。

    #define NOCOMM

Windows SDK ダウンロード サイト