gpt4 book ai didi

delphi - 有没有办法在 TRttiField 中 FieldType 为零的结构中获取 real48 和短字符串变量的 RTTI 提示?

转载 作者:行者123 更新时间:2023-12-03 15:29:06 26 4
gpt4 key购买 nike

我发现 Delphi 中的扩展 RTTI 功能存在一个奇怪的疏忽(可能是故意的)。

我想转储包含大约 1500 个不同字段的记录类型中的所有字段。是的,说真的。

其中一些是 real48 类型,一些是短字符串,对于这两种类型,在运行时这些类型的 FieldType 似乎为零:

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 值。

然而,第二个复杂之处是所有短字符串(即string[30])类型都受到类似的影响。

有人让这两种古代 Pascal 类型与现代扩展 RTTI 一起使用吗?现在我正在使用最佳猜测方法,如果失败,我会按字段名称对规则进行硬编码,但如果有某种技术我可以使用,那么我就可以到达那里,而无需编写大量代码来提取来 self 正在现代化的所有这些旧的帕斯卡记录文件中的信息,我将不胜感激更好的主意。

最佳答案

不幸的是 Real48 没有任何类型信息。

当你尝试编译这个时,你可以看到:

program Project1;

begin
TypeInfo(Real48);
end.

string[n] 语法也是如此。但是您可以通过定义自己的字符串类型来修复它,例如:

type
string30 = string[30];

仅此一项不会包含记录字段的 rtti,因此您需要破解/修复 rtti,如我在此处所示: https://stackoverflow.com/a/12687747/587106

关于delphi - 有没有办法在 TRttiField 中 FieldType 为零的结构中获取 real48 和短字符串变量的 RTTI 提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16340089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com