TObject::MethodAddress:通过名称返方法的地址
函数原型:
__classmethod void *__fastcall MethodAddress(const ShortString &Name); |
__classmethod void *__fastcall MethodAddress(const UnicodeString Name); |
头文件:
#include <System.hpp>
命名空间:
System
参数:
Name:方法的名称,即成员函数的名称。
返回值:
方法的地址,即成员函数的地址,只有在 __published: 访问权限里面的函数支持通过名称返回地址;
如果这个方法不在 __published: 访问权限区域里面,返回值为 NULL。
如果没有这个名称的方法,返回值为 NULL。
需要通过 TMethod 对象转为 __closure 指针来通过地址调用成员函数,
__closure 指针要定义为和成员函数相同的类型,例如参数,返回值等都必须相同,调用才不会出错。
例:通过成员函数名称找到成员函数地址,并且调用这个成员函数
class TMyObject : public TObject
{
__published:
virtual void __fastcall Func(void)
{
ShowMessage(L"Number = " + IntToStr(Number));
}
public:
int Number;
};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMyObject *Obj = new TMyObject;
Obj->Number = 12345;
TMethod Method; // 方法对象
Method.Code = Obj->MethodAddress(L"Func"); // 函数地址
Method.Data = Obj; // 对象地址
void __fastcall (__closure *lpFunction)(void); // 成员函数指针
*(TMethod*)(&lpFunction) = Method; // 转为 __closure 指针
lpFunction(); // 通过地址调用这个函数
delete Obj;
}
//--------------------------------------------------------------------------- |
兼容性:
相关链接:
• MethodName • FieldAddress • TObject::ClassType • TObject::ClassName • TObject • VCL基础类
|