我有一些用于处理包含文件中的不同Delphi版本的各种define语句。这个包含文件被“包含”在一个单元中。编译器遵循包含文件中给出的定义,但不包括IDE。这导致在uses子句中添加了某些单元,这些单元可以在那里 - 包含在DEFINE编译器指令中。
因此,如果添加了一个在Delphi XE3之前不可用的单元,那么您将遇到一个大问题,因为如果您让IDE添加单元并且无法使用之前没有的Delphi XE3版本进行编译那个单位。
E.g。一个单元,上面有一个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报告过。
该错误是否有解决方法?
基督教
答案 0 :(得分:3)
可能最简单的方法是使用单位别名功能来提供帮助。为了使其工作,您需要针对不同编译器版本的不同项目设置。例如,每个支持的编译器版本都有不同的.dpr和.dproj文件。
在您的XE2项目中,您可以定义单位别名,如下所示:
System.Actions=Vcl.ActnList
在XE3项目中,您省略了该别名。
然后在.pas文件中,您可以愉快地使用System.Actions,在任何版本的Delphi中都没有问题。
更简单的解决方案是创建一个名为System.Actions
的空单元,您只在项目中包含XE2构建。