QJson/QMsgPack RTTI 注意事项

在Delphi截止XE7的实现中,RTTI信息也并不是特别完美,所以在特定的情况下是无法获取到相应的RTTI信息,目前已知:

1、在implementation中的声明没有RTTI信息,所以你要使用ToRtti/FromRtti/ToRecord/FromRecord等函数,你必需保证用到的类型声明的interface部分。

interface
....
type
//TMyRecord可以用于RTTI相关函数
   TMyRecord=
   end;
....
implementation
type
//TMyRecord1类型不能用于RTTI相关函数
   TMyRecord1=
   end;

2、类型或对象的子类型如果是数组或动态数组里,应该将声明独立出来,否则,RTTI相关信息将无法有效使用。

如下面的代码无法用于RTTI相关函数:

TMyRecord=record
   Arr:array of Byte;//这个声明无法用于RTTI相关函数
end;

TMyRecord1=record
   Arr:array[0..1] of Byte;//这个声明也无法用于RTTI相关函数
end;

相应的修改为下面的形式即可:

TMyReocrdArr=array of Byte;
TMyRecord=record
   Arr:TMyReocrdArr;
end;

TMyRecordArr1=array[0..1] of Byte;
TMyRecord1=record
   Arr:TMyRecordArr1;
end;

 

分享到: