有没有办法确定对对象过程的引用是否对应于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的工作方式相同。