我想修改我的Delphi 2010代码以便在XE7中编译(并且希望仍能在2010中编译)。因此,在包含主窗体的单元中,我添加了条件指令。以下代码在2010中可以正常工作。
uses
{$IF CompilerVersion >= 24}System.Actions, {$ELSE}Actnlist,{$IFEND}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
但是XE7自动在结尾添加了System.Actions
,这样uses从句中就有两次声明了System.Actions(如下所示),并给出错误信息[dcc32 Error] MyForm.pas(10): E2004 Identifier redeclared: 'System.Actions'
。为什么XE7不接受条件指令内的单元?
uses
{$IF CompilerVersion >= 24}System.Actions, {$ELSE}Actnlist,{$IFEND}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
System.Actions; // <- automatically added
private
部分而不是默认的published
部分,并在运行时创建组件。你正在与IDE本身作斗争,你不会赢得这场战斗。 - Ken White{$IF CompilerVersion >= 24}System.Actions{$IFEND}
部分。如果我犯了一个“笔误”,比如({$IF CompilerVersion >= 24}System.Action*s{$IFEND}
),它会抱怨。因此,它知道接口使用中存在System.Actions。难道IDE和编译器不同步吗? - ss2006interface
uses子句属于IDE,涉及到放置在表单上的任何组件。 - Ken White