【问题标题】:When did WPARAM change from being signed to unsigned?WPARAM 何时从已签名变为未签名?
【发布时间】:2011-10-20 14:00:51
【问题描述】:

在 Delphi 6 中,WPARAM 被声明为已签名:

WPARAM = Longint;

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

WPARAM = INT_PTR;

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

WPARAM = UINT_PTR;

官方Windows definition是:

typedef UINT_PTR WPARAM;

这与 XE2 匹配。


有人知道更改是针对 XE 还是针对 XE2 进行的?

【问题讨论】:

    标签: delphi delphi-xe2


    【解决方案1】:

    在 Delphi XE WPARAM = INT_PTR; 中,因此在 XE2 中引入了更改。

    【讨论】:

    • 谢谢。这意味着我当前迁移到 XE2 的风险比我预期的要大。
    • @Lieven 我遇到过带有WParam>=0 之类的测试的代码。这里有一整类潜在的错误,很难找到。
    • 在 Delphi XE2 中,许多数据类型别名(在 WinAPI 单元中)更改为 Microsoft WinAPI 头文件中使用的原始数据类型。 WPARAM 不应该被声明为 Longint(在 Delphi 2 中)。现在他们修复了所有数据类型,让它们在 64 位 Delphi 中工作。
    • @NGLN 不会,因为不需要扩大。 WParam>=0 被“总是评估为真”警告捕获,但 WParam>0 不会被捕获并且具有完全不同的含义。
    • “旧新事物”(blogs.msdn.com/b/oldnewthing/archive/2011/06/29/10181137.aspx) 中的历史跟进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多