インクルードファイルでさまざまなDelphiバージョンを処理するためのさまざまなdefineステートメントがあります。このインクルードファイルは、ユニットに「インクルード」されます。コンパイラーはインクルードファイルで指定された定義を尊重しますが、IDEは尊重しません。これにより、すでに存在している可能性のあるuses句に特定のユニットが追加されます(DEFINEコンパイラ指令で囲まれています)。
したがって、Delphi XE3より前のバージョンで使用できないユニットが追加された場合、IDEにユニットを追加させ、そのユニットがないDelphi XE3より前のバージョンでコンパイルできないため、大きな問題が発生します。
たとえば、TActionListを含む1つのユニットを持つプロジェクト。
MYINCLUDE.INC
1つだけ定義する{$DEFINE DELPHIXE3}
サンプルユニットは次のようになります
unit Unit1; {$I MYINCLUDE.INC} uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, {$IFDEF DELPHIXE3} System.Actions, {$ENDIF} Vcl.ActnList; ...
保存後、IDEが
System.Actions
追加し、使用リストの最後を追加します。これにより、識別子が再宣言されたコンパイラエラーが発生します。削除すると、IDEは次の保存で再度追加します。
QC#111178に報告しました。
そのバグの回避策はありますか?
キリスト教徒