如何在 Delphi 中获取方法参数名称 array/list?

How to get a method param name array/list in Delphi?

有什么方法可以在Delphi 7 中的array/delimited 字符串中获取class/object 的给定方法的参数名称?有点像这样:

var
  s : string;
  aSL : TStringList;
begin
  ...
  // using rtti calls in TMethodUtility.collectParamNames
  s := TMethodUtility.collectParamNames( TStringList.addObject );
  // or
  TMethodUtility.collectParamNames( TStringList.addObject, aSL );
  ...
end;

提前致谢!

这在技术上是可行的(否则 IDE 的表单设计器无法在设计时为组件事件处理程序生成代码),但是,有一些重要的警告会阻碍您的目标(并使您问题中的特定示例无法解决):

  • 只为声明为 published 属性 生成必要的 RTTI(例如组件事件)。 RTTI 不是为方法本身(甚至 published 个方法)或不是 published.

  • 的属性生成的
  • TObject 有一个 public MethodAddress() 方法来获取 published 方法的内存地址(DFM 流系统在挂钩时使用这个up 事件处理程序),但是您不能单独从方法指针获得必要的 RTTI。

IF 您可以将给定的方法指针匹配到 published 事件的 value,然后您可以提取来自事件的 RTTI 的参数名称。使用TypInfo.GetPropInfo()函数获取事件的TypInfo.PPropInfo指针,然后将其PropType字段值传递给TypInfo.GetTypeData()函数获取TypInfo.PTypeData指针,然后您可以遍历其 ParamList 字段(这是一个包含 ParamNameTypeName 字段的记录数组)。

有关此主题的更多详细信息,请参阅以下博客文章:

Getting the parameters of published methods.

对于您正在尝试的内容,通用解决方案需要 Extended RTTI 于 Delphi 2010 年引入,因此在 Delphi 中不可用 7. 扩展 RTTI 不是限于 published 项,并且比旧式 RTTI 提供的内容 详细。