加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi:调用名称存储在字符串中的函数

发布时间:2020-12-15 10:04:07 所属栏目:大数据 来源:网络整理
导读:可以调用名称存储在Delphi中的字符串中的函数吗? 解决方法 请提供更多的细节,你想实现什么. 我所知道的: 不可能像这样调用一个随机函数. 对于类和对象函数(MyObject.Function),这可以用RTTI来完成,但这是很多工作. 如果你只需要调用一个特定类型的函数(比
可以调用名称存储在Delphi中的字符串中的函数吗?

解决方法

请提供更多的细节,你想实现什么.

我所知道的:

>不可能像这样调用一个随机函数.
>对于类和对象函数(MyObject.Function),这可以用RTTI来完成,但这是很多工作.
>如果你只需要调用一个特定类型的函数(比如说,函数(整数,整数):string),这很简单.

对于最后一个,声明一个函数类型,然后获取一个函数指针并将其转换为:

type
  TMyFuncType = function(a: integer; b: integer): string of object;

  TMyClass = class
  published
    function Func1(a: integer; b: integer): string;
    function Func2(a: integer; b: integer): string;
    function Func3(a: integer; b: integer): string;
  public
    function Call(MethodName: string; a,b: integer): string;
  end;

function TMyClass.Call(MethodName: string; a,b: integer): string;
var m: TMethod;
begin
  m.Code := Self.MethodAddress(MethodName); //find method code
  m.Data := pointer(Self); //store pointer to object instance
  Result := TMyFuncType(m)(a,b);
end;

{...}

//use it like this
var MyClass: TMyClass;
begin
  MyClass := TMyClass.Create;
  MyClass.Call('Func1',3,5);
  MyClass.Call('Func2',6,4);
  MyClass.Destroy;
end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读