我正在将一个大型的Delphi代码库适配成64位。在许多情况下,有一些行会将指针转换为/从32位值,类似于这种情况:
var
p1,p2 : pointer;
begin
inc(Integer(p1),10);
p2 := Pointer(Integer(p1) + 42);
我用NativeInt-casts代替了这些casts以使它们在64位模式下正确,但我不确定是否找出了所有casts。有时候casts更加微妙,所以仅仅搜索“integer(”字符串也不足够。
由于如果指针值超出整数类型的范围,“integer(”casts将在64位失败,我有一个想法:如果我可以强制内存管理器分配超过4gb的内存(因此指针值使用超过32位),那么我就会得到运行时错误并更容易地找到错误的casts。这可能吗?或者有人可以推荐其他技术吗?