主页C++ Builder 资料C++ Builder 参考手册VCL 基础类TObject
C++ Builder 串口控件
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
基础知识
cfloat 浮点数
cmath 数学函数
cstdlib 标准库函数
System 字符串
System 日期和时间
System.Math.hpp 数学函数
其他数据类型
VCL 基础类
 • TObject
   · 方法
   · TObject
   · ~TObject
   · Free
   · DisposeOf
   · InitInstance
   · NewInstance
   · InstanceSize
   · FreeInstance
   · CleanupInstance
   · ClassType
   · ClassName
   · ClassNameIs
   · QualifiedClassName
   · UnitName
   · UnitScope
   · ClassParent
   · ClassInfo
   · InheritsFrom
   · MethodAddress
   · MethodName
   · FieldAddress
   · GetInterface
   · GetInterfaceEntry
   · GetInterfaceTable
   · Equals
   · GetHashCode
   · ToString
   · SafeCallException
   · AfterConstruction
   · BeforeDestruction
   · Dispatch
   · DefaultHandler
 • TPersistent
 • TInterfacedPersistent
 • TComponent
 • TControl
 • TGraphicControl
 • TGraphicsObject
VCL 应用程序
Pictures 图片
Graphics 绘图
Additional 控件
System 控件
A ~ Z 字母顺序排列的目录
网友留言/技术支持
TObject::MethodAddress - 通过名称返方法的地址

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;
}
//---------------------------------------------------------------------------

兼容性:

函数 \ C++ Builder 编译器 bcc32 clang32 clang64
TObject::MethodAddress

相关链接:

MethodNameFieldAddressTObject::ClassTypeTObject::ClassNameTObjectVCL基础类

◤上一页:InheritsFrom下一页:MethodName

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号