我有一个函数返回record
结果。我需要将它传递给另一个方法Pointer
。它适用于32位模式,但在64位模式下会引发Invalid type cast
错误。我该如何解决?
我已尝试查找已知的解决方案但仅找到record
到TObject
转换方法:Invalid typecast: convert record to tobject on 64-bit platform
aTList.Add(Pointer(aRecord)); // aRecord is a result of the function
答案 0 :(得分:5)
此代码仅在aRecord
与指针大小相同时才有效。因此,aRecord
似乎是32位宽,因为代码编译为32位。
使代码在32位和64位编译器中运行的最简单方法是首先转换为32位整数,然后转换为指针。像这样:
Pointer(Cardinal(aRecord))
在相反的方向,你需要扭转这个过程。首先投射到Cardinal
然后再投射到记录:
TMyRecord(Cardinal(ptr))
FWIW,您在链接的问题中提到的解决方案可以很好地运行。在实现级别,TObject
变量只不过是一个指针。
也许是时候开始使用通用列表了,TList<TMyRecord>
是你的朋友。