首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Ios 64位的Delphi Rtti

带Ios 64位的Delphi Rtti
EN

Stack Overflow用户
提问于 2016-05-24 10:58:28
回答 1查看 115关注 0票数 0

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

代码语言:javascript
复制
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位,我在行中得到一个访问冲突:

代码语言:javascript
复制
vType:=vPackage.GetTypes

当然,我在compil选项中添加了"emit RTTI information“。

EN

回答 1

Stack Overflow用户

发布于 2016-05-25 08:10:59

我终于找到问题所在了。问题出在以下代码:

代码语言:javascript
复制
  wurRecDouble = packed record
  case byte of
   0 : (Value : Double);
   1 : (Bytes: array [0..7] of Byte);
  end;

在Ios 64位下,在RTTI信息有效的情况下,线路

代码语言:javascript
复制
vTypes:=vPackage.GetTypes;

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

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

另外,从理论上讲,Delphi不会发出记录的RTTI信息,那么为什么要使用带有记录的A/V呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37403658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档