Delphi打包对象 - 向后兼容性破坏

时间:2015-09-07 08:19:09

标签: delphi

我正在将一个旧项目从Delphi 7移动到2007年,它似乎是打包的对象

type
  TMyTime = packed object
  private
    Year: Word;
    Month: Byte;
    Day: Byte;
    Hour: Byte;
    Minute: Byte;
    Milliseconds: Word;
  end;

生成

  

[Pascal Error] * .pas(x):E2006 PACKED不允许在这里

D2007中的

错误。

可能有人告诉我哪个Delphi版本打破了打包对象的兼容性?

2 个答案:

答案 0 :(得分:4)

QC10279 "packed object" compilation error我们可以看到该错误已在D2005中报告并在XE2中得到修复。

答案 1 :(得分:2)

您可以在这里使用record代替object

type
  TMyTime = packed record
    Year: Word;
    Month: Byte;
    Day: Byte;
    Hour: Byte;
    Minute: Byte;
    Milliseconds: Word;
  end;

或启用object范围本身的打包:

type
  {$A-} // packed object
  TMyTime = object
  private
    Year: Word;
    Month: Byte;
    Day: Byte;
    Hour: Byte;
    Minute: Byte;
    Milliseconds: Word;
  end;
  {$A+} // default un-packed 

后者的优点是可以在Delphi 7和更新版本上进行编译。

对于Delphi 2009及更高版本,请尽量避免使用object which is buggy。改为使用增强型record类型 - 但您会失去继承......