如何在 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
字段(这是一个包含 ParamName
和 TypeName
字段的记录数组)。
有关此主题的更多详细信息,请参阅以下博客文章:
Getting the parameters of published methods.
对于您正在尝试的内容,通用解决方案需要 Extended RTTI 于 Delphi 2010 年引入,因此在 Delphi 中不可用 7. 扩展 RTTI 不是限于 published
项,并且比旧式 RTTI 提供的内容 多 详细。
有什么方法可以在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
有一个 publicMethodAddress()
方法来获取published
方法的内存地址(DFM 流系统在挂钩时使用这个up 事件处理程序),但是您不能单独从方法指针获得必要的 RTTI。
IF 您可以将给定的方法指针匹配到 published
事件的 value,然后您可以提取来自事件的 RTTI 的参数名称。使用TypInfo.GetPropInfo()
函数获取事件的TypInfo.PPropInfo
指针,然后将其PropType
字段值传递给TypInfo.GetTypeData()
函数获取TypInfo.PTypeData
指针,然后您可以遍历其 ParamList
字段(这是一个包含 ParamName
和 TypeName
字段的记录数组)。
有关此主题的更多详细信息,请参阅以下博客文章:
Getting the parameters of published methods.
对于您正在尝试的内容,通用解决方案需要 Extended RTTI 于 Delphi 2010 年引入,因此在 Delphi 中不可用 7. 扩展 RTTI 不是限于 published
项,并且比旧式 RTTI 提供的内容 多 详细。