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)
提前致谢!
这在技术上是可行的(否则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提供.
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |