我最近从D2010迁移到DXE2,在类别中的TBytes字段的RTTI生成相关的XE2和XE3(在我的朋友XE3中测试)发现了一个showstopper错误(或者特征?).
我发现一个类中的TBytes变量的RTTI信息从不生成.
以下代码在D2010中运行良好,但在XE2 / XE3中显示消息“Error”
有人有任何线索吗?这将彻底打破我们所有的软件数据序列化实现
type TMyClass = class public Field1: Integer; Field2: TBytes; end; procedure TForm2.Button1Click(Sender: TObject); var i: Integer; Data: TMyClass; Rtti: TRttiContext; RttiClassType: TRttiInstanceType; begin Data := TMyClass.Create; try // Get the context Rtti := TRttiContext.Create; try // Get the type for the class RttiClassType := TRttiInstanceType(Rtti.GetType(Data.ClassInfo)); // Check the fields for i := 0 to High(RttiClassType.GetFields) do begin // Check the field type if not Assigned(RttiClassType.GetFields[i].FieldType) then ShowMessage('Error'); end; finally Rtti.Free; end; finally Data.Free; end; end;
当检查Field2是一个TBytes时会显示错误信息,因为FieldType总是为零!
有没有人对D2010做XE2的RTTI有什么变化?可能是因为TBytes类型从Byte数组更改为通用数组?
解决方法
这是
a known issue that was fixed in XE3.不幸的是,升级是获得修复的唯一方法;错误修复通常不会被移回.
编辑:还是不.显然,这并不是固定的,因为它仍然发生在XE3中.报告为新的案例,并提及103729可能是最好的行动方案.