gpt4 book ai didi

delphi - 如何避免在Delphi中使用插入命名空间

转载 作者:行者123 更新时间:2023-12-03 14:46:35 25 4
gpt4 key购买 nike

我在Delphi 2007中管理着一个巨大的项目。目标是今年将其升级到Delphi 10.1 Berlin。因此,同时在两个版本中编译源代码。

如果新的 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,
ActnMan,
Classes,
Controls,
Forms,
Graphics,
ImgList,
Menus,
SysUtils,
XPStyleActnCtrls,
Variants,
{$IFDEF BOLD_DELPHI16_OR_LATER}
System.ImageList,
System.Actions,
{$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 的 use 子句。

关于delphi - 如何避免在Delphi中使用插入命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com