什么时候WPARAM从签名变为无签名?

Dav*_*nan 9 delphi delphi-xe2

在Delphi 6 WPARAM中声明为签名:

WPARAM = Longint;
Run Code Online (Sandbox Code Playgroud)

在Delphi 2010 WPARAM中声明为已签名:

WPARAM = INT_PTR;
Run Code Online (Sandbox Code Playgroud)

但在XE2中,它被声明为无符号:

WPARAM = UINT_PTR;
Run Code Online (Sandbox Code Playgroud)

官方的Windows定义是:

typedef UINT_PTR WPARAM;
Run Code Online (Sandbox Code Playgroud)

这与XE2匹配.


有谁知道改变是针对XE还是针对XE2?

RRU*_*RUZ 8

在Delphi XE中,WPARAM = INT_PTR; 所以在XE2中引入了更改.

  • @Lieven我遇到了像`WParam> = 0`这样的测试代码.这里有一大堆潜在的错误,很难找到. (4认同)
  • 在Delphi XE2中,许多数据类型别名(以WinAPI为单位)更改为Microsofts WinAPI头文件中使用的原始数据类型.WPARAM应该从未被声明为Longint(在Delphi 2中).现在,他们修复了所有数据类型,使它们在64位Delphi中运行. (3认同)
  • @NGLN不会,因为不需要拓宽.`WParam> = 0`被"始终评估为True"警告捕获,但是`WParam> 0`将不会被捕获并具有完全不同的含义. (2认同)