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

如何在Delphi的64位平台上将记录转换为指针?,delphi,pointers,casting,64-bit,record,Delphi,Pointers,Casting,64 Bit,Record,我有一个函数返回记录结果。我需要将它作为指针传递给另一个方法。它在32位模式下工作,但在64位模式下引发无效类型转换错误。我怎样才能修好它 我试图寻找已知的解决方案,但只找到了recordtoTObject转换方法: 只有当aRecord与指针大小相同时,此代码才能工作。因此,aRecord似乎是32位宽的,因为代码是在32位上编译的 要使代码同时在32位和64位编译器中工作,最简单的方法是先强制转换为32位整数,然后再转换为指针。像这样: Pointer(Cardinal(aRecord))

我有一个函数返回
记录
结果。我需要将它作为
指针
传递给另一个方法。它在32位模式下工作,但在64位模式下引发
无效类型转换
错误。我怎样才能修好它

我试图寻找已知的解决方案,但只找到了
record
to
TObject
转换方法:


只有当
aRecord
与指针大小相同时,此代码才能工作。因此,
aRecord
似乎是32位宽的,因为代码是在32位上编译的

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

Pointer(Cardinal(aRecord))
在相反的方向上,您需要反转该过程。先向红衣主教an施放,然后再录制:

TMyRecord(Cardinal(ptr))
FWIW,您在问题中提到的解决方案,您的链接工作得非常好。在实现级别,一个
TObject
变量只不过是一个指针


也许是时候开始使用泛型列表了,
TList
是您在这里的朋友。

您可以发布有效的代码,以及导致编译器错误的代码吗?它在32位模式下不起作用,您的记录不是指针。您需要记录的地址(@aRecord)。它在32位模式下工作!这是流行的Toolbar2000组件的代码。@SertacAkyuz这里没有地址。这只是滥用
TList
。代码正在将4字节记录重新解释为指针,以便将其添加到
TList
。指针永远不会被取消引用,以后会被转换回记录类型。@David-谢谢,我一直在努力理解发生了什么。它很有效,谢谢你给我关于泛型列表的建议!
TMyRecord(Cardinal(ptr))