有没有办法在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;
提前致谢!
答案 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
字段(包含ParamName
和TypeName
字段的记录数组。)
有关详细信息,请参阅以下有关此主题的博客文章:
Getting the parameters of published methods
对于您正在尝试的内容,通用解决方案需要在Delphi 2010中引入的Extended RTTI,因此在Delphi 7中不可用。扩展RTTI不仅限于published
个项目,并且很多比旧式RTTI提供的更详细。