2

我正在将我们的项目从 XE7 更新到 XE8。目前他们仍需要使用 XE7,因此需要一些条件。比如ImageList换了单位,所以XE8中的Vcl.ImgList就是Syste.ImageList。为了使它适用于两个 Delphi 版本,uses 子句看起来像这样:

uses
  System.SysUtils, System.Classes, Vcl.Controls
  {$IF CompilerVersion >= 29.0}
  ,System.ImageList
  {$else}
  ,Vcl.ImgList
  {$endif}

  ,cxGraphics;

有时这很好用。然而,Delphi 经常会自动重新添加 System.Imagelist 单元,即使它已经存在,尽管是在有条件的情况下,例如

uses
  System.SysUtils, System.Classes, Vcl.Controls
  {$IF CompilerVersion >= 29.0}
  ,System.ImageList
  {$else}
  ,Vcl.ImgList
  {$endif}

  ,cxGraphics, System.ImageList;

编译后,XE8 会报错。

[dcc32 Error] dmImagesU.pas(13): E2004 Identifier redeclared: 'System.ImageList'

a) Delphi 为什么要加单位?b)有人知道解决方法吗?

4

1 回答 1

5

在这种情况下,负责将单元添加到使用中的“解析器”没有正确考虑编译器指令(该问题已在引入 时出现System.Actions.pas)。

我通常为较旧的 Delphi 版本创建一个虚拟单元,因此我不必将任何指令放入使用中。

因此,在您的情况下,只需创建一个空System.ImageList.pas并将其放在 <= XE7 找到它的某个地方。

于 2015-08-27T09:27:09.977 回答