Windows桌面应用程序(1-4th) 使用Windows头文件

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.1NTDDI_WINBLUE(0x06030000)
Windows 8NTDDI_WIN8(0x06020000)
Windows 7NTDDI_WIN7(0x06010000)
Windows Server 2008NTDDI_WS08(0x06000100)
Windows Vista Service Pack 1(SP1)NTDDI_VISTASP1(0x06000100)
Windows VistaNTDDI_VISTA(0x06000000)
Windows Server 2003 Service Pack 2(SP2)NTDDI_WS03SP2(0x05020200)
带有Service Pack 1的Windows Server 2003(SP1)NTDDI_WS03SP1(0x05020100)
Windows Server 2003NTDDI_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 XPNTDDI_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

相关话题

Windows SDK下载站点


原文链接:Using the Windows Headers

返回目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值