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

标签 pascal freepascal

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

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/

相关文章:

c++ - 在 FreePascal 中使用 C/C++ DLL

delphi - Pascal 和 Delphi 语法错误?

xml - 拉撒路/自由帕斯卡 : read/write nodes with the same name using TXMLConfig

delphi - 是否可以在 Delphi 和 FreePascal 中声明数组的 const 而不让元素为常量?

arrays - 二维数组的唯一编号分配

delphi - Pascal: 变量 i : 1..10;

installation - 将字符串转换为字节数组将不起作用

pascal - 如何修复退出代码 201?

delphi - Lazarus 应用程序中的启动画面问题