delphi - 阻止 Delphi 自动错误地添加单位

标签 delphi delphi-xe7 delphi-xe8 uses-clause

我正在将我们的项目从 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/

相关文章:

c# - 访问 Delphi DLL 抛出偶尔的异常

delphi - 如何将 'parent' 写入表单? (控件不接受焦点)

database - Delphi XE8 中没有 TTable 组件

delphi - 如何正确地将C与Delphi静态链接?

Delphi:使组件对实时绑定(bind)可见

delphi - 要安装哪些更新才能达到最新版本的 Delphi 2007?

delphi - 隐藏无参数创建并重新引入?

php - 使用 PHP 转换 delphi TColor

android - 注册。 delphi中Android应用程序的大小

delphi - 如何将 TObject 转换为 TObjectList<T>?