停止 Delphi 自动错误地添加单位
Stop Delphi automatically adding units incorrectly
我正在将我们的项目从 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) 有人知道解决方法吗?
在这种情况下负责向用途添加单元的 "parser" 没有正确考虑编译器指令(引入 System.Actions.pas
时已经出现该问题)。
我通常为较旧的 Delphi 版本创建一个虚拟单元,这样我就不必在使用中添加任何指令。
所以在你的情况下,只需创建一个空的 System.ImageList.pas
并将其放在 <= XE7 可以找到的地方。
我正在将我们的项目从 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) 有人知道解决方法吗?
在这种情况下负责向用途添加单元的 "parser" 没有正确考虑编译器指令(引入 System.Actions.pas
时已经出现该问题)。
我通常为较旧的 Delphi 版本创建一个虚拟单元,这样我就不必在使用中添加任何指令。
所以在你的情况下,只需创建一个空的 System.ImageList.pas
并将其放在 <= XE7 可以找到的地方。