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

Dmi*_*try -1 delphi 64-bit pointers casting record

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

我试图寻找已知的解决方案,但发现只有recordTObject转换方法:无效的类型转换:转换记录TObject的64位平台

aTList.Add(Pointer(aRecord)); // aRecord is a result of the function
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

此代码只有aRecord在与指针大小相同的情况下才能工作.因此,它似乎aRecord是32位宽,因为代码编译为32位.

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

Pointer(Cardinal(aRecord))
Run Code Online (Sandbox Code Playgroud)

在相反的方向,您需要反转该过程.先铸造Cardinal然后再记录下来:

TMyRecord(Cardinal(ptr))
Run Code Online (Sandbox Code Playgroud)

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

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