【问题标题】:Calling method by name Delphi 10 Firemonkey按名称调用方法 Delphi 10 Firemonkey
【发布时间】:2016-03-18 13:05:19
【问题描述】:

我正在尝试在 firemonkey 项目中按名称调用方法。但到目前为止还没有运气。

下面是我的代码:

type
  TExecute = procedure of object;
  TUpdates= class(TDataModule)
     procedure UpdateToVersion(Version: Integer);
  private
     procedure UpdateToVersion1;
     procedure UpdateToVersion2;
     procedure UpdateToVersion3;
     procedure Call(Name: string);
  public
  end;

procedure TUpdates.Call(Name: String);
var
  m:TMethod;
  Exe:TExecute;
begin
  m.Data := pointer(Self);
  m.Code := Self.MethodAddress(Name);
  Exe := TExecute(m);
  Exe;
end;

procedure TUpdates.UpdateToVersion(Version: Integer);
begin
   Call('UpdateToVersion'+version.ToString);
end;

procedure TUpdates.UpdateToVersion1;
begin
   //code
end;

procedure TUpdates.UpdateToVersion2;
begin
   //code
end;

procedure TUpdates.UpdateToVersion3;
begin
   //code
end;

结果: 例如,当我调用 UpdateToVersion(1) 时,我会遇到访问冲突,并且不会调用过程 UpdateToVersion1。

我从以下链接的示例中获得此代码: http://www.swissdelphicenter.ch/torry/showcode.php?id=799

【问题讨论】:

    标签: delphi call firemonkey procedure delphi-10-seattle


    【解决方案1】:

    MethodAddress 要求发布该方法,示例代码中的方法也是如此。您的方法是私有的。因此MethodAddress 失败并返回nil

    通过发布方法来解决问题。

    如果您希望使用未发布的方法执行此类任务,则需要使用增强的 RTTI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      相关资源
      最近更新 更多