加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi XE2 RTTI坏了?

发布时间:2020-12-15 06:10:53 所属栏目:大数据 来源:网络整理
导读:我最近从D2010迁移到DXE2,在类别中的TBytes字段的RTTI生成相关的XE2和XE3(在我的朋友XE3中测试)发现了一个showstopper错误(或者特征?). 我发现一个类中的TBytes变量的RTTI信息从不生成. 以下代码在D2010中运行良好,但在XE2 / XE3中显示消息“Error” 有人有
我最近从D2010迁移到DXE2,在类别中的TBytes字段的RTTI生成相关的XE2和XE3(在我的朋友XE3中测试)发现了一个showstopper错误(或者特征?).

我发现一个类中的TBytes变量的RTTI信息从不生成.

以下代码在D2010中运行良好,但在XE2 / XE3中显示消息“Error”

有人有任何线索吗?这将彻底打破我们所有的软件数据序列化实现

要测试代码,请将Rtti单元添加到使用声明中

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可能是最好的行动方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读