我正在将我们的项目从 XE7 更新到 XE8。目前他们仍然需要使用 XE7,因此需要一些条件。例如,ImageList改变了单位,所以Vcl.ImgList在XE8中是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) 有人知道解决方法吗?
最佳答案
在这种情况下,负责向使用添加单元的“解析器”没有正确考虑编译器指令(引入 System.Actions.pas
时已经出现了该问题)。
我通常为旧的 Delphi 版本创建一个虚拟单元,因此我不必在使用中添加任何指令。
因此,在您的情况下,只需创建一个空的 System.ImageList.pas
并将其放在某个地方 <= XE7 找到它。
关于delphi - 阻止 Delphi 自动错误地添加单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32245375/