如何在Delphi中获取方法param名称数组/列表?

时间:2016-07-21 14:38:58

标签: delphi parameters rtti

有没有办法在Delphi 7中获取数组/分隔字符串中类/对象的给定方法的参数名称?不知怎的,这样:

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

提前致谢!

1 个答案:

答案 0 :(得分:5)

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

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

  • TObject有一个公共MethodAddress()方法来获取published方法的内存地址(DFM流系统在连接事件处理程序时使用此方法)但是你不能单独从方法指针获取必要的RTTI。

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

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

Getting the parameters of published methods

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

相关问题