使用Windows标头

Windows API的头文件使您可以创建32位和64位应用程序。 它们包括API的Unicode和ANSI版本的声明。 有关更多信息,请参阅Windows API中的Unicode 。 它们使用的数据类型使您能够从单个源代码库构建应用程序的32位和64位版本。 有关更多信息,请参阅为64位Windows做好准备 。 其他功能包括标题注释STRICT类型检查 。

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

原文地址:https://docs.microsoft.com/zh-cn/windows/desktop/WinProg/using-the-windows-headers

猜你喜欢

转载自blog.csdn.net/xinqingwuji/article/details/89091052