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

有没有办法确定对对象过程的引用是否对应于Pascal中的对象实例?,pascal,freepascal,Pascal,Freepascal,对于这个任务,我有一个不是很好的解决方案,但是有人能告诉我如何使用标准库或更优雅的方法吗。当前的解决方案基于这样一个事实:对对象过程的引用在内存中存储了两个指针,一个指向过程代码的指针和一个指向对象的指针 function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean; begin Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointe

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

function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean;
begin
  Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointer( AObject );
end;
我会使用
系统
单元中声明的记录。该记录包含两个类型为
指针
-
代码
数据
的成员字段,允许您选择方法的两个指针。在本例中,您需要
数据
成员,该成员是方法的主题:

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

仅供参考,这与FreePascal和Delphi的工作方式相同。