2

プロジェクトを 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) 回避策を知っている人はいますか?

4

1 に答える 1

5

この場合、uses にユニットを追加する責任を負う「パーサー」は、コンパイラ ディレクティブを適切に考慮していません (この問題は の導入で既に発生していますSystem.Actions.pas)。

私は通常、Delphi の古いバージョン用にダミー ユニットを作成するので、uses にディレクティブを追加する必要はありません。

したがって、あなたの場合は空System.ImageList.pasを作成し、それをどこかに置くだけです<= XE7がそれを見つけます。

于 2015-08-27T09:27:09.977 に答える