在使用一些新版本的API,或者控件的新特性(比如新版的ComCtl32.dll)的时候,你可能会得到“error C2065: undeclared identifier.“这个错误。原因是这些功能是依赖于你的操作系统的版本的。而你的头文件中的定义并不是最新的。(对于MFC,就是stdafx.h)下面这篇MSDN文章介绍了如何解决这个问题,并详细列举了每个Windows版本对应的NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE这些宏。
原文:http://msdn2.microsoft.com/en-us/library/aa383745.aspx
标题:Using the Windows Headers
例:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 项目特定的包含文件
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN// 从 Windows 标头中排除不常使用的资料
#endif
// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER// 允许使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0500//为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_WINNT// 允许使用 Windows NT 4 或更高版本的特定功能。
#define _WIN32_WINNT 0x0500//为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_WINDOWS// 允许使用 Windows 98 或更高版本的特定功能。
#define _WIN32_WINDOWS 0x0410 //为 Windows Me 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_IE// 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0400//为 IE 5.0 及更新版本改变为适当的值。
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS// 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常被安全忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#include <afxdtctl.h>// Internet Explorer 4 公共控件的 MFC 支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>// Windows 公共控件的 MFC 支持
#endif // _AFX_NO_AFXCMN_SUPPORT
// 或是经常使用但不常更改的
// 项目特定的包含文件
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN// 从 Windows 标头中排除不常使用的资料
#endif
// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER// 允许使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0500//为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_WINNT// 允许使用 Windows NT 4 或更高版本的特定功能。
#define _WIN32_WINNT 0x0500//为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_WINDOWS// 允许使用 Windows 98 或更高版本的特定功能。
#define _WIN32_WINDOWS 0x0410 //为 Windows Me 及更新版本改变为适当的值。
#endif
#ifndef _WIN32_IE// 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0400//为 IE 5.0 及更新版本改变为适当的值。
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS// 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常被安全忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#include <afxdtctl.h>// Internet Explorer 4 公共控件的 MFC 支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>// Windows 公共控件的 MFC 支持
#endif // _AFX_NO_AFXCMN_SUPPORT