web-dev-qa-db-ja.com

SDKDDKVer.hは何のためのものですか?

MSVCで作成されたすべてのプロジェクトには、プリコンパイル済みヘッダーであるstdafxがあります。これは、それらが何であるかを知っていますが、targetver.hについてはどうですか? SDKDDKVer.hが含まれており、そのヘッダーの内容が見つかりません。

これは何のため ?

21
jokoon

targetver.hおよびSDKDDKVer.hは、プログラムでサポートするOSに基づいて、Windowsヘッダーからコードに含める関数、定数などを制御するために使用されます。定義が別の場所で指定されていない限り、targetver.hはデフォルトで最新バージョンのWindowsを使用するように設定していると思います。

SDKDDKVer.hは、WindowsやIEなどの各バージョンを表す#definesを実際に定義するヘッダーファイルです。

11
Andy

SDKDDKVer.hの193行目(SDK 8.1)は次のように述べています。

"バージョンがまだ定義されていない場合、デフォルトで最新のバージョンに"

このコメントは、特に_WIN32_WINNTおよびNTDDI_VERSIONマクロを参照しています。

そう..

  1. SDKDDKVer.hは、マクロがすでに定義されていない限り、デフォルト値を適用します
  2. 次のコードを使用して、マクロを明示的に定義できます
    • #define _WIN32_WINNT 0x0601
    • #define NTDDI_VERSION 0x06010000
  3. 興味深いことに、SDKDDKVer.hヘッダーファイルには、すべてのSDKバージョンに対して定義された「定数」値があります。例えば:
    • #define _WIN32_WINNT_WINXP 0x0501
    • #define _WIN32_WINNT_WIN7 0x0601
    • #define _WIN32_WINNT_WIN8 0x0602
  4. 1つの規則は、_WIN32_WINNTと呼ばれるヘッダーファイルでNTDDI_VERSIONTargetVer.hを定義することです。これは、コンパイル済みヘッダーStdAfx.hで参照します。

追加の読書

3
Pressacco