Windows桌面应用程序(1-3-1-2nd) 新数据类型

为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。

特定指针精度类型

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

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

猜你喜欢

转载自blog.csdn.net/qq_37422196/article/details/81175904
今日推荐