我想知道以下是否可能,如果是,怎么样?代码示例请.
我想要做的是将'方法指针'存储在TComponent派生对象的整数Tag值中,稍后调用存储的方法.您可以假设所有met方法具有相同的定义.
谢谢!
不,这是不可能的.对象的方法等同于TMethod:
TMethod = record
Code, Data: Pointer;
end;
Run Code Online (Sandbox Code Playgroud)
该Code
字段是方法的地址,Data
字段是Self
传递给每个对象方法的隐藏参数.该记录与Int64的大小相同,因此如果将其转换为纯整数,则会丢失一半.
您可以使用GetMem在堆上分配TMethod记录,然后将其存储在Tag属性中,只要您记得在完成它时将其释放即可.
你可以做一些解决方法,但它不是很好的设计......
var
Method: ^TNotifyEvent;
begin
//Create New method
GetMem(Method, SizeOf(TNotifyEvent));
//Init target Tag
Tag := Integer(Method);
//Store some method
Method^ := Button1Click;
//call stored method
Method := (Pointer(Tag));
Method^(self);
//And don't forget to call in to object destructor...
if Tag <> 0 then
FreeMem(pointer(Tag));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6232 次 |
最近记录: |