如何有条件地包括一些单位
我有各种定义语句用于在包含文件中处理不同的Delphi版本。 这个包含文件是“包含”在一个单元中的。 编译器尊重包含文件中给出的定义,但不支持IDE。 这导致在uses语句中增加了某些单元,这些单元可能已经存在 - 被包含在DEFINE编译器指令中。
因此,如果在Delphi XE3之前添加了一个不可用的单元,那么您将遇到很大的问题,因为如果您让IDE添加该单元,并且无法使用之前没有该单元的Delphi XE3版本编译该单元。
例如一个项目带有一个单位,其上有一个TActionList。
MYINCLUDE.INC
只有一个定义{$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汇报。
有没有解决该错误的方法?
基督教
可能最简单的做法是使用单元别名功能来提供帮助。 为了这个工作,你需要不同的编译器版本的不同的项目设置。 例如,对于每个受支持的编译器版本,不同的.dpr和.dproj文件。
在你的XE2项目中,你定义了一个单元别名,如下所示:
System.Actions=Vcl.ActnList
在XE3项目中,您省略了该别名。
然后在你的.pas文件中,你可以愉快地使用System.Actions而不会在任何版本的Delphi中出现问题。
一个更简单的解决方案是创建一个名为System.Actions
的空单元,只包含在项目中用于XE2构建。