如何避免在Delphi中使用insert namespace

前端之家收集整理的这篇文章主要介绍了如何避免在Delphi中使用insert namespace前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Delphi 2007中管理了一个庞大的项目.目标是今年升级到Delphi 10.1柏林.因此,同时源代码在两个版本中编译.

如果新Delphi出现问题,我们希望将旧版本作为备份.

我在单元dmActions.pas中的问题是从TDataModule继承的单元.

uses
  // VCL
  ActnList,ActnMan,Classes,Controls,Forms,Graphics,ImgList,Menus,SysUtils,XPStyleActnCtrls,Variants,{$IFDEF BOLD_DELPHI16_OR_LATER}
  System.ImageList,System.Actions,{$ENDIF}

  BusinessClasses;

Delphi IDE无法理解我的IFDEF,因此会自动为此插入缺少的单元

uses
  // VCL
  ActnList,{$ENDIF}

  BusinessClasses,System.ImageList,System.Actions;

但这不会在柏林用这条消息编译

[dcc32 Error] dmActions.pas(36): E2004 Identifier redeclared: 'System.ImageList'
[dcc32 Error] dmActions.pas(36): E2004 Identifier redeclared: 'System.Actions'

当然,“System.ImageList,System.Actions”不在D2007中编译.
那么解决这个问题的最佳方法是什么?

解决方法

您可以在此处使用Delphi的单元别名功能 – 至少在您的Delphi 2007首先支持虚线单元名称时.这允许使用来自Delphi 10.1 Berlin的System.SysUtils这样的新单元名称,并且仍然使用Delphi 2007编译该项目.

为此,您必须将映射添加到Delphi 2007项目的单元别名中,如下所示:

System.SysUtils=SysUtils
System.Classes=Classes

对于Delphi 2007中不存在的单元,就像您在帖子中提到的单元一样,只需映射到现有单元:

System.Actions=ActnList
System.ImageList=ImgList

作为一个好处,您最终会使用不含IFDEF的使用条款.

猜你在找的Delphi相关文章