Delphi Rtti,带Ios 64位

时间:2016-05-24 02:58:28

标签: ios delphi 64-bit rtti delphi-10.1-berlin

我有以下代码,在Delphi Berlin(10.1)的新项目中创建:

Procedure Test;
var
 vRttiContext : TRttiContext;
 vPackages : TArray<TRttiPackage>;
 vTypes : Tarray<TRttiType>;
 vType : TRttiType;
 vPackage : TRttiPackage;
begin
 vRttiContext:=TRttiContext.Create;
 vPackages:=vRttiContext.GetPackages;
 if (vPackages<>nil) then
  for vPackage in vPackages do
   begin
    vTypes:=vPackage.GetTypes;
    case vtype.TypeKind of
     tkClass : ; //DoSomething
    end;
  end;
end;

此代码在Win32 / Win64,Ios32位下完美运行, 但不适用于IOS64。

使用Ios64位,我在行中遇到了访问冲突:

vType:=vPackage.GetTypes

当然我在compil选项中添加了“emit RTTI informations”。

1 个答案:

答案 0 :(得分:1)

我终于找到了这个问题。问题是以下代码:

  wurRecDouble = packed record
  case byte of
   0 : (Value : Double);
   1 : (Bytes: array [0..7] of Byte);
  end;

在Ios 64位下,RTTI信息有效,行

vTypes:=vPackage.GetTypes;

(参见前面的代码)将生成一个A / V(明显为零)

如果我将Value的类型更改为Int64,例如A / V消失。

另外Delphi理论上没有为记录发出RTTI信息,为什么有记录的A / V?