有没有办法确定对对象过程的引用是否对应于 Pascal 中的对象实例?
Is there a way to determine if a reference to an object procedure corresponds to the object instance in Pascal?
对于这个任务我有一个不是很好的解决方案,但是有人可以告诉我如何使用标准库或更优雅的方法。目前的解决方案是基于对象的过程引用在内存中存储了两个指针,一个是过程代码的指针,一个是对象的指针。
function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean;
begin
Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointer( AObject );
end;
我将使用 System
单元中声明的 TMethod
记录。该记录包含两个 Pointer
类型的成员字段 - Code
和 Data
,允许您挑选出方法的两个指针。在您的情况下,您需要 Data
成员,它是方法的主题:
function ObjectIsMethodSubject(AObject: TObject; AEvent: TNotifyEvent): Boolean;
begin
Result := TMethod(AEvent).Data = AObject;
end;
对于这个任务我有一个不是很好的解决方案,但是有人可以告诉我如何使用标准库或更优雅的方法。目前的解决方案是基于对象的过程引用在内存中存储了两个指针,一个是过程代码的指针,一个是对象的指针。
function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean;
begin
Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointer( AObject );
end;
我将使用 System
单元中声明的 TMethod
记录。该记录包含两个 Pointer
类型的成员字段 - Code
和 Data
,允许您挑选出方法的两个指针。在您的情况下,您需要 Data
成员,它是方法的主题:
function ObjectIsMethodSubject(AObject: TObject; AEvent: TNotifyEvent): Boolean;
begin
Result := TMethod(AEvent).Data = AObject;
end;