gpt4 book ai didi

windows - 将 Delphi 代码移植到 64 位 - 为什么没有编译器警告?

转载 作者:可可西里 更新时间:2023-11-01 12:44:13 25 4
gpt4 key购买 nike

我们有一个大型 Delphi XE 代码库,我们希望将其移植到 64 位。

我拥有 Delphi XE2 许可证,但我找不到任何警告或提示可以帮助我检测有效的 32 位结构,这些结构现在会导致 64 位平台下的数据丢失。例如,对于 32 位编译器完全有效的 THandleCardinal 的赋值在为 Win64 编译时不会引发任何警告。

在使用 Delphi 2009 迁移到 Unicode 时,我们收到了大量警告,这对我们跟踪和修复可疑代码有很大帮助。使用 XE2,我找不到任何东西。我无法想象在编译器级别没有集成任何东西来避免我们对所有代码进行手动审查。

我错过了什么吗?如果您尝试过,您是如何将项目移植到 64 位的?

谢谢!

最佳答案

你没有错过任何东西。产品中没有任何内容可以帮助您。

我也觉得这有点令人失望,但我完全希望 Emba 的设计师考虑到这一点。我只能得出结论,他们的经验是添加此类警告导致的噪音多于信号。 Delphi 编译器在分配给不兼容的整数类型时从未发出警告。例如,将整数分配给字节从来都不是警告或错误。

是时候启动 grep 并搜索 Integer\(.*\)Longint\(.*\)Cardinal\(.*\), Longword\(.*\), THandle


为了回应 Arnaud 的评论和回答,我提供了以下代码,在以 64 位为目标时编译时没有警告和错误。

procedure NaughtyCode;
var
Handle: THandle;
int: Integer;
card: Cardinal;
P: Pointer;
begin
Handle := high(Handle);
int := Handle;
card := Handle;
P := Pointer(Handle);
int := Integer(P);
card := Cardinal(P);
end;

关于windows - 将 Delphi 代码移植到 64 位 - 为什么没有编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com