gpt4 book ai didi

pascal - 有没有办法确定对对象过程的引用是否对应于 Pascal 中的对象实例?

转载 作者:行者123 更新时间:2023-12-02 09:04:09 26 4
gpt4 key购买 nike

对于这项任务,我有一个不太好的解决方案,但有人可以告诉我如何使用标准库或更优雅的方法。当前的解决方案基于这样的事实:对对象的过程的引用在内存中存储两个指针,一个指向过程代码的指针和一个指向对象的指针。

function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean;
begin
Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointer( AObject );
end;

最佳答案

我会使用TMethodSystem 单元中声明的记录。该记录包含两个 Pointer 类型的成员字段 - CodeData,允许您选取方法的两个指针。在您的情况下,您需要 Data 成员,它是方法的主题:

function ObjectIsMethodSubject(AObject: TObject; AEvent: TNotifyEvent): Boolean;
begin
Result := TMethod(AEvent).Data = AObject;
end;

关于pascal - 有没有办法确定对对象过程的引用是否对应于 Pascal 中的对象实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60392440/

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