delphi – 有没有办法在TRttiField中FieldType为nil的结构中获取
我发现我认为Delphi中扩展RTTI功能的一个奇怪的疏忽(可能是故意的).
我想将所有字段转储到其中包含大约1500个不同字段的记录类型中.是的,认真的. 其中一些是real48类型,有些是shorttring,对于这两个,在运行时看起来这些类型的FieldType是nil: function TRttiField.GetValue(Instance: Pointer): TValue; var ft: TRttiType; begin ft := FieldType; if ft = nil then raise InsufficientRtti; // This fires! TValue.Make(PByte(Instance) + Offset,ft.Handle,Result); end; 如果我愿意假设所有nil-fieldtype字段实际上是real48的,我可以简单地使用偏移量(如果字段宽度为6),则获取real48值. 然而,第二个复杂因素是所有短串(即字符串[30])类型同样受到影响. 有没有人有这两种古代Pascal类型与现代扩展RTTI一起工作? 解决方法
不幸的是,Real48没有任何类型的信息.
你可以看到,当你尝试编译时: program Project1; begin TypeInfo(Real48); end. string [n]语法也是如此.但你可以通过定义自己的字符串类型来修复它: type string30 = string[30]; 仅此一项就不包括记录字段的rtti所以你需要修改/修复rtti,如我在此处所示:https://stackoverflow.com/a/12687747/587106 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |