gpt4 book ai didi

delphi - TProc 和引用的内部(内存)表示

转载 作者:行者123 更新时间:2023-12-03 15:07:15 28 4
gpt4 key购买 nike

这里有人知道 Delphi 如何表示对过程的引用吗?

例如

var
proc: TProc;
...
proc = procedure begin beep end;

我们在“proc”中得到了什么?

我知道对于“方法变量”,内存表示是“过程地址”的 4 个字节,后面是“对象地址”的 4 个字节,但是对于“过程的引用”有些不同,我不太清楚出来。

我想要这个的原因是因为我有一些遗留代码,我想让它与引用一起工作。

有人知道吗?

最佳答案

方法引用作为 COM 样式接口(interface)实现,具有名为 Invoke 的单个方法,该方法与方法引用具有相同的签名。

所以TProc看起来像这样:

type
TProc = interface(IInterface) // so inherits QI, AddRef, Release
procedure Invoke;
end;

这是一个值得提出的问题,因为 Delphi 与 C++ 产品具有互操作性。通过使用预先存在的引用计数类型和习惯用法(COM 生命周期规则),可以在方法引用级别与 C++ 进行互操作。

匿名方法生成一个隐藏类,该类实现与方法引用接口(interface)同构的接口(interface),即形状完全相同,但符号标识不同。隐藏类不直接实现方法引用接口(interface),因为它可能需要多次实现该接口(interface)(单个 block 可能包含多个匿名方法,所有匿名方法都分配给同一方法引用类型的位置)。

关于delphi - TProc 和引用的内部(内存)表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6572395/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com