错误:找不到F1026文件:'System.Actions.dcu'从XE3切换回Delphi XE2

时间:2012-10-25 07:47:39

标签: delphi migration delphi-xe2 delphi-xe3

我正在将代码从XE2移到Delphi XE3,但它应该在两者中编译。我注意到有些单位将'System.Actions'自动添加到USES子句中。然后,当使用:

返回XE2时会导致错误

F1026找不到文件:'System.Actions.dcu'(单位范围“系统”表示仅限Win64,OSX32,Win32)

我从来没有真正理解单位范围。有没有一个正确的解决方案来解决这个问题而不是在编译器版本{$ IFDEF}中包装东西?

由于

3 个答案:

答案 0 :(得分:10)

XE2中没有Actions单位。它是XE3中的新功能,是将Action支持引入FireMonkey的重构工作的一部分。记录在案:

What's New in Delphi and C++Builder XE3

  

操作:FireMonkey现在支持操作和操作列表,这两个功能以前只在VCL中受支持:

     

重要提示:使用操作的每个FireMonkey或VCL应用程序都必须在使用部分中指定System.Actions和System.Classes单元。

Changes in Implementation of VCL Actions

  

System.Actions单元在RTL包中创建。 Vcl.ActnList单元中提供与框架无关的操作功能的类将移动到此单元中。 System.Actions中的类扩展了TBasicAction和TBasicActionLink类中引入的动作特性的最基本行为。

     

重要说明:由于这些更改,您需要将System.Classes和System.Actions单元添加到使用部分。

Implementation of Actions in FireMonkey and VCL

  

FireMonkey(FMX)

     

与框架无关的实现对于FireMonkey和VCL是通用的:   此基本操作功能在新的System.Actions RTL单元中进行了扩展。

     

VCL

     

以前RAD Studio版本中Vcl.ActnList单元中实现的与框架无关的操作功能现在位于RTL中的新System.Actions单元中(VCL和FireMonkey通用)。

     

重要说明:由于这些更改,您需要将System.Actions单元添加到使用操作的VCL应用程序中的uses部分(或#includes)。

如果您实际上没有在代码中使用操作,则必须删除对Actions的引用,否则{$IFDEF}将其删除。

答案 1 :(得分:10)

Remy所说的非常正确,但可能有一种更简单的方法可以使您的代码在XE2和XE3中都能正常工作。只需将System.Actions的单位别名添加到Vcl.ActnList即可。

Delphi Compiler页面的项目选项中添加此项。您需要添加以下内容:

System.Actions=Vcl.ActnList

请注意,如果您需要使用相同的.dproj文件在XE2和XE3中进行编译,那么您就不走运了。单位别名设置将停止在XE3下编译程序。但是,如果您有XE2和XE3的不同.dproj文件,那么这将允许您在两者中使用相同的源。或者,如果您只需要在命令行编译XE2,那么您可以在那里添加此单元别名。我不知道这是否会对你有所帮助,但我知道单位别名功能在过去不止一次帮助我脱离了类似的地方。

答案 2 :(得分:2)

如果您有一个项目文件,您仍然可以使用项目路径目录中的“虚拟”System.Actions.pas文件解决问题: 该文件将在XE2下获取。 XE3编译器将在IDE / lib目录中找到他的System.Actions.dcu。

无论如何:在正常情况下,您应该使用不同的项目文件 - 然后建议使用单位别名的解决方案。

虚拟System.Actions.pas看起来像:

    unit System.Actions;
    (*
    XE2 compatibility unit: since XE3 unit System.Actions will be inserted into every 
    interface in units which use actions.
    compilerswitch in [uses] is ignored by IDE - so this solution enable successful
    compilation in XE2 with same project file than XE3
    *)
    interface

    implementation

    end.