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

The*_*man 2 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;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Rem*_*eau 5

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

  • 必要的RTTI仅为声明为的属性published(例如组件事件)生成.对于方法本身(甚至是published方法),或者对于非方法本身,不生成RTTI published.

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

如果你可以在给定方法指针匹配到值一的published情况下,那么你可以从事件的RTTI提取参数名称.TypInfo.PPropInfo使用该TypInfo.GetPropInfo()函数获取事件的指针,然后将其PropType字段值传递给TypInfo.GetTypeData()函数以获取TypInfo.PTypeData指针,然后您可以遍历其ParamList字段(这是包含ParamName和TypeName字段的记录数组).

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

获取已发布方法的参数.

对于您正在尝试一下,一个通用的解决方案将需要扩展RTTI这是德尔福2010年推出,因此不可在Delphi 7.扩展RTTI不限于published项目,是多比更详细的东西旧式RTTI提供.