ios - 带有 Ios 64 位的 Delphi Rtti

标签 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

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

最佳答案

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

  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 带有记录呢?

关于ios - 带有 Ios 64 位的 Delphi Rtti,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403658/

相关文章:

ios - 每次创建一个新的uiviewcontroller 还是重用一样?

ios - 分组 Xcode 方案

ios - Plist 从 URL 到 NSMutableArray

delphi - 延迟的 DLL 指令导致 FireDAC 查询上的应用程序死锁

ios - swift 函数参数名称中的间距

delphi - Firebird 2.5 中的 Windows 身份验证

c# - sgen.exe x64 .net c# 失败,出现 "assembly with an incorrect format"

windows - 将整个注册表导出到相对路径

c++ - 如何使用 Visual C++ 2010 Express 编译 64 位应用程序?

string - 从 Delphi 7 升级到 Delphi 2009