WINVER および _WIN32_WINNT の更新

Windows SDK を使用する場合は、コードを実行できる Windows のバージョンを指定できます。 プリプロセッサマクロ WINVER_WIN32_WINNT は、コードがサポートするオペレーティングシステムの最小バージョンを指定します。 Visual Studio と、Windows 7 SP1 以降を対象とする Microsoft C++ コンパイラのサポート。 以前のツールセットには、Windows XP SP2、Windows server 2003 SP1、Vista、Windows server 2008 のサポートが含まれています。 Windows 95、Windows 98、Windows ME、Windows NT、および Windows 2000 はサポートされていません。

古いプロジェクトをアップグレードするときに、 WINVER または _WIN32_WINNT マクロを更新することが必要になる場合があります。 サポートされていないバージョンの Windows に値が割り当てられている場合は、これらのマクロに関連するコンパイルエラーが発生する可能性があります。

注釈

マクロを変更するには、ヘッダーファイル (たとえば、Windows を対象とする一部のプロジェクトテンプレートに含まれるtargetver) で、次の行を追加します。

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

この例のマクロは、Windows 10 オペレーティングシステムのすべてのバージョンを対象とするように設定されています。 使用可能な値は Windows ヘッダーファイル sdkddkver.h に一覧表示されます。このファイルは、メジャー Windows バージョンごとにマクロを定義します。 以前の Windows プラットフォームをサポートするアプリケーションをビルドするには、 winsdkver.h インクルードをインクルードします。 次に、 sdkddkver.hを含める前に、 WINVER_WIN32_WINNTマクロを、サポートされている最も古いプラットフォームに設定します。 次に示すのは、Windows の各メジャーバージョンの値をエンコードする、Windows 10 SDK バージョンのsdkddkver.hの行です。

//
// _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
// . . .

バージョン管理の詳細な方法については、 sdkddkver.hの NTDDI version 定数を使用できます。 Windows 10 SDK バージョン10.0.18362.0 のsdkddkver.hで定義されているマクロの一部を次に示します。

//
// 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) )

Osverマクロ、 spverマクロ、およびsubverマクロをコード内で使用して、さまざまなレベルの API サポートの条件付きコンパイルを制御できます。

sdkddkver.hに表示されているすべてのバージョンの Windows が表示されない場合があります。 つまり、古いバージョンの Windows SDK が使用されていることがあります。 (詳細については、SDK の新しいバージョンを参照していることが考えられます)。 既定では、Visual Studio の新しい Windows プロジェクトは、Visual Studio に付属している最新の Windows SDK を使用します。 個別にインストールした新しい SDK を使用するには、プロジェクトのプロパティで Windows SDK を明示的に設定する必要があります。

注意

アプリケーションに内部 MFC ヘッダーを含めた場合には、値が動作する保証はありません。

/D コンパイラ オプションを使用して、このマクロを定義することもできます。 詳細については、「 /d (プリプロセッサの定義)」を参照してください。

これらのマクロの意味について詳しくは、「 Windows ヘッダーの使用」をご覧ください。

関連項目

Visual C++ の変更履歴