【问题标题】:what is SDKDDKVer.h for?SDKDDKVer.h 是做什么用的?
【发布时间】:2012-05-19 08:15:02
【问题描述】:

使用 MSVC 创建的所有项目都有 stdafx,它是预编译的头文件,我知道它们是什么,但 targetver.h 呢?它包括 SDKDDKVer.h,我找不到那个头文件是关于什么的。

这是干什么用的?

【问题讨论】:

  • 它主要定义_WIN32_WINNTWINVER。它做其他事情,但这是它最重要的任务。

标签: c++ windows visual-c++


【解决方案1】:

targetver.hSDKDDKVer.h 用于根据您希望程序支持的操作系统来控制 Windows 标头中将哪些函数、常量等包含到您的代码中。我相信targetver.h 将默认设置为使用最新版本的 Windows,除非在其他地方指定了定义。

SDKDDKVer.h是真正定义了代表Windows、IE等各个版本的#defines的头文件

【讨论】:

  • targetver.h 文件是在您创建项目时自动生成的,并且只包含两行:#pragma once#include <SDKDDKVer.h>,所以基本上它没有做任何事情,包括 SDKDDKVer.h 本身不会做..
  • @d7samurai 默认情况下它什么都不做,但是您可以在targetver.h 中指定目标版本,并且您应该在调用SDKDDKVer.h 之前执行此操作。它只是一个允许您这样做的文件。
  • 当您使用 Visual Studio 向导创建 Windows 桌面应用程序时,生成的 .rc 资源文件可能包括以下内容: #ifndef APSTUDIO_INVOKED #include "targetver.h" #endif 在此类应用程序中,最好维护一个 targetver.h 文件以定义_WIN32_WINNTWINVER,而不是在stdafx.h 中定义它们。
【解决方案2】:

SDKDDKVer.h(在 SDK 8.1 中)的第 193 行状态:

"如果尚未定义版本,则默认为最新"

此评论特指_WIN32_WINNTNTDDI_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. 一种约定是在名为TargetVer.h 的头文件中定义_WIN32_WINNTNTDDI_VERSION,您可以在预编译的头文件StdAfx.h 中引用它们。

补充阅读

【讨论】:

  • 精湛,实用的答案!可惜在包含<SDKDDKVer.h>之前这些常量都不可用。
猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 2011-08-24
  • 2023-04-03
  • 2014-03-04
  • 2011-10-25
  • 2015-07-17
  • 2014-02-26
  • 2012-06-29
相关资源
最近更新 更多