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

Bri*_*ost 3 migration delphi delphi-xe2 delphi-xe3

我正在将我的代码从XE2移到Delphi XE3,但它应该在两者中编译.我注意到有些单位将'System.Actions'自动添加到USES子句中.这会在返回XE2时导致错误:

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

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

谢谢

Rem*_*eau 10

ActionsXE2中没有单位.它是XE3中的新功能,是将Action支持引入FireMonkey的重构工作的一部分.记录如下:

Delphi和C++ Builder XE3中的新功能:

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

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

VCL行动实施的变化

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

要点:作为这些更改的结果,您需要将System.Classes和System.Actions单元添加到uses部分.

在FireMonkey和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}其删除.


Dav*_*nan 10

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

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

System.Actions=Vcl.ActnList
Run Code Online (Sandbox Code Playgroud)

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