6

我在 x64 中找不到关于 TVarData 的任何解释。帮助中有一个页面,但 x64 中的 TVarData 和 x86 中的 TVarData 似乎不同。实际上我正在尝试为 x64 目标编译 DEHL。但它在这一行上说“无效的类型转换”:(来源是 TVarData)

Big := TBigCardinalVarData(Source).BigCardinalPtr^;

TBigCardinalVarData 在这里:

TBigCardinalVarData = packed record
  VType: TVarType;
  Reserved1, Reserved2, Reserved3: Word;
  BigCardinalPtr: PBigCardinal;
  Reserved4: LongWord;
end;

它在 x86 中编译,但它拒绝在 x64 中编译。我认为问题出在 Word 和 LongWord 变量中。但我还想不通。

4

1 回答 1

12

问题在于packed record声明,打包记录类型在 X64 中成为记录类型,因此您必须从声明中的“打包记录”中删除“打包”,而是使用ALIGN指令。

{$ALIGN 8}
TBigCardinalVarData = record
  VType: TVarType;
  Reserved1, Reserved2, Reserved3: Word;
  BigCardinalPtr: PBigCardinal;
  Reserved4: LongWord;
end;

有关更多信息,请阅读这些条目

于 2011-10-15T17:51:22.433 回答