我有以下代码,是在Delphi柏林(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 information“。
发布于 2016-05-25 08:10:59
我终于找到问题所在了。问题出在以下代码:
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 (明显为nil)
例如,如果我将值的类型更改为Int64,则A/V将消失。
另外,从理论上讲,Delphi不会发出记录的RTTI信息,那么为什么要使用带有记录的A/V呢?
https://stackoverflow.com/questions/37403658
复制相似问题