Delphi Rtti with Ios 64 Bits



我有以下代码,在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

当然,我在编译选项中添加了"发出RTTI信息"。

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

  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(明显为零)

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

此外,德尔福在理论上不会为记录发出RTTI信息,那么为什么要使用带有记录的A/V呢?

最新更新