新数据类型

为 64 位 Windows 引入了三类数据类型:固定精度数据类型、指针精度类型和特定指针精度类型。 这些类型已添加到开发环境,使开发人员能够准备 64 位 Windows。 这些类型派生自基本的 C 语言整数和长类型。 因此,可以在 32 位 Windows 上编译和测试的代码中使用这些数据类型,然后在面向 64 位 Windows 时使用 64 位编译器重新编译。

即使对于仅面向 32 位 Windows 的应用程序,采用这些新数据类型也会使代码更加可靠。 若要使用这些数据类型,必须扫描代码中可能存在不安全的指针用法、多态性和数据定义。 例如,当变量的类型 为 ULONG_PTR 时,很明显,它将用于转换算术运算或多态性的指针。 不能通过使用较旧的数据类型直接指示此类用法。 (可以使用派生类型命名或匈牙利符号间接执行此操作,但这两种方法都容易出错。)

所有这些数据类型都在 BaseTsd.h 中声明。 有关详细信息(包括这些数据类型的定义),请参阅 Windows 数据类型

固定精度

固定精度数据类型在 32 位和 64 位 Windows 中的长度相同。 为了帮助你记住这一点,其精度是数据类型名称的一部分。 以下是固定精度数据类型。

术语 说明
DWORD32
32 位无符号整数
DWORD64
64 位无符号整数
INT32
32 位带符号整数
INT64
64 位带符号整数
LONG32
32 位带符号整数
LONG64
64 位带符号整数
UINT32
未签名 的 INT32
UINT64
未签名 的 INT64
ULONG32
无符号 LONG32
ULONG64
无符号 LONG64

指针精度

当指针精度 (即,当指针精度在 32 位 Windows 上变为 32 位,在 64 位 Windows) 上变为 64 位时,指针精度数据类型相应地反映精度。 因此,在执行指针算术时,可以安全地将指针强制转换为其中一种类型;如果指针精度为 64 位,则类型为 64 位。 计数类型还反映了指针可以引用的最大大小。 以下是指针精度和计数类型。

术语 说明
DWORD_PTR
指针精度的无符号长类型。
HALF_PTR
指针大小的一半。 在包含指针和两个小字段的结构中使用 。
INT_PTR
指针精度的带符号整数类型。
LONG_PTR
指针精度的有符号长类型。
SIZE_T
指针可以引用的最大字节数。 使用 表示必须跨越指针全范围的计数。
SSIZE_T
已签名 SIZE_T
UHALF_PTR
无符号 HALF_PTR
UINT_PTR
未签名 INT_PTR
ULONG_PTR
无符号 LONG_PTR

特定Pointer-Precision类型

以下新指针类型显式调整指针的大小。 在 64 位代码中使用指针时请谨慎:如果使用 32 位类型声明指针,操作系统将通过截断 64 位指针来创建指针。 (64 位 Windows 上的所有指针均为 64 位)

术语 说明
POINTER_32
32 位指针。 在 32 位 Windows 上,这是一个本机指针。 在 64 位 Windows 上,这是截断的 64 位指针。
POINTER_64
64 位指针。 在 64 位 Windows 上,这是一个本机指针。 在 32 位 Windows 上,这是一个符号扩展的 32 位指针。
请注意,假定高指针位的状态是不安全的。