Delphi XE中的RTTI零星问题

时间:2015-03-30 18:29:16

标签: delphi delphi-xe rtti

我们发现Delphi XE存在问题,有时TRttiType.GetTypes会返回一个空数组。其他时候,使用完全相同的代码,数组包含预期的类型。使用TJSONMarshalTJSONUnMarshal通过DataSnap编组/解组类时发生错误。

知道为什么在下面单元中调用GetTypes会返回一个空数组? (不应该要求$M指令。正是因为我尝试了几种蛮力方法,包括$STRONGLINKTYPES。)

unit uTest;

interface

uses
  Classes;

type
{$M+}
  TMyClass = class(TPersistent)
  public
    Value1 : Integer;
    Value2 : String;
    Value3 : Currency;
    Value4 : Boolean;
    Value5 : Double;
end;

procedure Test;

implementation

uses
  Dialogs, Rtti, SysUtils;

procedure Test;
var
  c: TRttiContext;
  t: TRttiType;
  a: TArray<TRttiField>;

begin
  c := TRttiContext.Create;
  t := c.GetType(TypeInfo(TMyClass));
  if Assigned(t) then begin
    a := t.GetFields;
    ShowMessage(IntToStr(High(a)));
  end
  else
    ShowMessage('TMyClass not found');
end;

procedure ForceReferenceToClass(C: TClass);
var
  dummy: TObject;
begin
  dummy := C.Create();
  dummy.Free();
end;

initialization
  ForceReferenceToClass(TMyClass);
end.

由于

0 个答案:

没有答案