Dmi*_*try -1 delphi 64-bit pointers casting record
我有一个函数返回record结果.我需要将它传递给另一种方法Pointer.它适用于32位模式,但Invalid type cast在64位模式下会引发错误.我该如何解决?
我试图寻找已知的解决方案,但发现只有record到TObject转换方法:无效的类型转换:转换记录TObject的64位平台
aTList.Add(Pointer(aRecord)); // aRecord is a result of the function
Run Code Online (Sandbox Code Playgroud)
此代码只有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>是你的朋友.