我有以下代码,在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”。
答案 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?