Windows API的头文件使您可以创建32位和64位应用程序。它们包括API的Unicode和ANSI版本的声明。有关更多信息,请参阅Windows API中的Unicode。它们使用的数据类型使您能够从单个源代码库构建应用程序的32位和64位版本。有关更多信息,请参阅为64位Windows做好准备。其他功能包括头文件注释和严格类型检查。
Visual C ++和Windows头文件
Microsoft Visual C ++包含Visual C ++发布时当前的Windows头文件的副本。因此,如果从SDK安装更新的头文件,则最终可能会在计算机上安装多个版本的Windows头文件。如果您不确保使用最新版本的SDK头文件,则在编译使用Visual C ++发布后引入的功能的代码时,您将收到以下错误代码:错误C2065:未声明的标识符。
条件声明的宏
某些依赖于特定Windows版本的函数是使用条件代码声明的。这使您可以使用编译器来检测您的应用程序是否使用Windows目标版本不支持的功能。要编译使用这些函数的应用程序,必须定义适当的宏。否则,您将收到C2065错误消息。
Windows头文件使用宏来指示哪些版本的Windows支持许多编程元素。因此,您必须定义这些宏以使用每个主要操作系统版本中引入的新功能。(单个头文件可能使用不同的宏;因此,如果出现编译问题,请检查包含条件定义定义的头文件。)有关详细信息,请参阅SdkDdkVer.h。
下表介绍了Windows头文件中使用的首选宏。如果定义NTDDI_VERSION,则还必须定义_WIN32_WINNT。
需要最低系统 | NTDDI_VERSION的值 |
---|---|
Windows 8.1 | NTDDI_WINBLUE(0x06030000) |
Windows 8 | NTDDI_WIN8(0x06020000) |
Windows 7 | NTDDI_WIN7(0x06010000) |
Windows Server 2008 | NTDDI_WS08(0x06000100) |
Windows Vista Service Pack 1(SP1) | NTDDI_VISTASP1(0x06000100) |
Windows Vista | NTDDI_VISTA(0x06000000) |
Windows Server 2003 Service Pack 2(SP2) | NTDDI_WS03SP2(0x05020200) |
带有Service Pack 1的Windows Server 2003(SP1) | NTDDI_WS03SP1(0x05020100) |
Windows Server 2003 | NTDDI_WS03(0x05020000) |
Windows XP Service Pack 3(SP3) | NTDDI_WINXPSP3(0x05010300) |
Windows XP Service Pack 2(SP2) | NTDDI_WINXPSP2(0x05010200) |
Windows XP Service Pack 1(SP1) | NTDDI_WINXPSP1(0x05010100) |
Windows XP | NTDDI_WINXP(0x05010000) |
下表描述了Windows头文件中使用的其他宏。
需要最低系统 | _WIN32_WINNT和WINVER的最小值 |
---|---|
Windows 8.1 | _WIN32_WINNT_WINBLUE(0x0602) |
Windows 8 | _WIN32_WINNT_WIN8(0x0602) |
Windows 7 | _WIN32_WINNT_WIN7(0x0601) |
Windows Server 2008 | _WIN32_WINNT_WS08(0x0600) |
Windows Vista | _WIN32_WINNT_VISTA(0x0600) |
Windows Server 2003 SP1,Windows XP SP2 | _WIN32_WINNT_WS03(0x0502) |
Windows Server 2003,Windows XP | _WIN32_WINNT_WINXP(0x0501) |
需要最低版本 | _WIN32_IE的最小值 |
---|---|
Internet Explorer 10.0 | _WIN32_IE_IE100(0x0A00) |
Internet Explorer 9.0 | _WIN32_IE_IE90(0x0900) |
Internet Explorer 8.0 | _WIN32_IE_IE80(0x0800) |
Internet Explorer 7.0 | _WIN32_IE_IE70(0x0700) |
Internet Explorer 6.0 SP2 | _WIN32_IE_IE60SP2(0x0603) |
Internet Explorer 6.0 SP1 | _WIN32_IE_IE60SP1(0x0601) |
Internet Explorer 6.0 | _WIN32_IE_IE60(0x0600) |
Internet Explorer 5.5 | _WIN32_IE_IE55(0x0550) |
Internet Explorer 5.01 | _WIN32_IE_IE501(0x0501) |
Internet Explorer 5.0,5.0a,5.0b | _WIN32_IE_IE50(0x0500) |
设置WINVER或_WIN32_WINNT
您可以通过在每个源文件中使用#define语句或通过指定Visual C ++支持的/ D编译器选项来定义这些符号。
例如,要在源文件中设置WINVER,请使用以下语句:
#define WINVER 0x0502
要在源文件中设置_WIN32_WINNT,请使用以下语句:
#define _WIN32_WINNT 0x0502
要使用/ D编译器选项设置_WIN32_WINNT,请使用以下命令:
cl -c /D_WIN32_WINNT=0x0502 source**.cpp**
有关使用/ D编译器选项的信息,请参阅/ D(预处理器定义)。
请注意,最新版本的Windows中引入的某些功能可能会添加到以前版本的Windows的Service Pack中。因此,要定位Service Pack,您可能需要使用下一个主要操作系统版本的值定义_WIN32_WINNT。例如,GetDllDirectory函数是在Windows Server 2003中引入的,如果_WIN32_WINNT为0x0502或更高版本,则会有条件地定义。此功能也已添加到带有SP1的Windows XP中。因此,如果要将_WIN32_WINNT定义为0x0501以定位Windows XP,则会遗漏在Windows XP SP1中定义的功能。
控制结构包装
应编译项目以使用默认结构打包,当前为8个字节,因为最大的整数类型是8个字节。这样做可确保头文件中的所有结构类型都编译到应用程序中,并具有Windows API所需的相同对齐方式。它还确保具有8字节值的结构正确对齐,并且不会导致强制数据对齐的处理器上的对齐错误。
有关更多信息,请参阅/ Zp(struct member alignment)或pack。
使用较小的头文件更快地构建
您可以通过排除一些不太常见的API声明来减小Windows头文件的大小,如下所示:
-
定义WIN32_LEAN_AND_MEAN以排除诸如加密,DDE,RPC,Shell和Windows套接字之类的API。
#define WIN32_LEAN_AND_MEAN
-
定义一个或多个NO api符号以排除API。例如,NOCOMM排除了串行通信API。有关支持NO api符号的列表,请参阅Windows.h.
#define NOCOMM
相关话题
原文链接:Using the Windows Headers
返回目录