如何在Delphi上的64位平台上将记录转换为指针?

时间:2014-07-23 15:27:12

标签: delphi pointers casting 64-bit record

我有一个函数返回record结果。我需要将它传递给另一个方法Pointer。它适用于32位模式,但在64位模式下会引发Invalid type cast错误。我该如何解决?

我已尝试查找已知的解决方案但仅找到recordTObject转换方法:Invalid typecast: convert record to tobject on 64-bit platform

aTList.Add(Pointer(aRecord)); // aRecord is a result of the function

1 个答案:

答案 0 :(得分:5)

此代码仅在aRecord与指针大小相同时才有效。因此,aRecord似乎是32位宽,因为代码编译为32位。

使代码在32位和64位编译器中运行的最简单方法是首先转换为32位整数,然后转换为指针。像这样:

Pointer(Cardinal(aRecord))

在相反的方向,你需要扭转这个过程。首先投射到Cardinal然后再投射到记录:

TMyRecord(Cardinal(ptr))

FWIW,您在链接的问题中提到的解决方案可以很好地运行。在实现级别,TObject变量只不过是一个指针。

也许是时候开始使用通用列表了,TList<TMyRecord>是你的朋友。