【发布时间】:2013-01-09 08:26:45
【问题描述】:
我正在努力使大型 Delphi 代码库适应 64 位。在许多情况下,有几行指针被转换为/从 32 位值转换,类似于:
var
p1,p2 : pointer;
begin
inc(Integer(p1),10);
p2 := Pointer(Integer(p1) + 42);
在哪里可以找到这些转换,我已将它们替换为 NativeInt-casts,以使它们在 64 位模式下正确。
但是我不确定我是否已经找到了所有这些。有时演员阵容更加微妙,因此仅对字符串“integer(”进行文本搜索也是不够的。
由于如果指针值高于整数类型的范围,“整数(”转换将在 64 位中失败,我有一个想法:如果我可以强制内存管理器分配高于 4gb 的内存(所以指针值正在使用超过 32 位)?那么我会得到运行时错误,并且可以更容易地找到错误的强制转换。这可能吗?或者任何人都可以推荐一些其他技术?
【问题讨论】:
标签: delphi memory-management 64-bit delphi-xe2