【发布时间】:2012-05-19 08:15:02
【问题描述】:
使用 MSVC 创建的所有项目都有 stdafx,它是预编译的头文件,我知道它们是什么,但 targetver.h 呢?它包括 SDKDDKVer.h,我找不到那个头文件是关于什么的。
这是干什么用的?
【问题讨论】:
-
它主要定义
_WIN32_WINNT和WINVER。它做其他事情,但这是它最重要的任务。
标签: c++ windows visual-c++
使用 MSVC 创建的所有项目都有 stdafx,它是预编译的头文件,我知道它们是什么,但 targetver.h 呢?它包括 SDKDDKVer.h,我找不到那个头文件是关于什么的。
这是干什么用的?
【问题讨论】:
_WIN32_WINNT 和WINVER。它做其他事情,但这是它最重要的任务。
标签: c++ windows visual-c++
targetver.h 和 SDKDDKVer.h 用于根据您希望程序支持的操作系统来控制 Windows 标头中将哪些函数、常量等包含到您的代码中。我相信targetver.h 将默认设置为使用最新版本的 Windows,除非在其他地方指定了定义。
SDKDDKVer.h是真正定义了代表Windows、IE等各个版本的#defines的头文件
【讨论】:
targetver.h 文件是在您创建项目时自动生成的,并且只包含两行:#pragma once 和#include <SDKDDKVer.h>,所以基本上它没有做任何事情,包括 SDKDDKVer.h 本身不会做..
targetver.h 中指定目标版本,并且您应该在调用SDKDDKVer.h 之前执行此操作。它只是一个允许您这样做的文件。
.rc 资源文件可能包括以下内容: #ifndef APSTUDIO_INVOKED #include "targetver.h" #endif 在此类应用程序中,最好维护一个 targetver.h 文件以定义_WIN32_WINNT 和WINVER,而不是在stdafx.h 中定义它们。
SDKDDKVer.h(在 SDK 8.1 中)的第 193 行状态:
"如果尚未定义版本,则默认为最新"
此评论特指_WIN32_WINNT 和NTDDI_VERSION 宏。
所以..
SDKDDKVer.h 应用默认值,除非宏已经定义#define _WIN32_WINNT 0x0601#define NTDDI_VERSION 0x06010000SDKDDKVer.h 头文件为所有 SDK 版本定义了“常量”值。例如:
#define _WIN32_WINNT_WINXP 0x0501#define _WIN32_WINNT_WIN7 0x0601#define _WIN32_WINNT_WIN8 0x0602TargetVer.h 的头文件中定义_WIN32_WINNT 和NTDDI_VERSION,您可以在预编译的头文件StdAfx.h 中引用它们。【讨论】:
<SDKDDKVer.h>之前这些常量都不可用。