gpt4 book ai didi

delphi - 如何有条件地包含某些单位

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

我有各种定义语句来处理包含文件中的不同 Delphi 版本。该包含文件被“包含”在一个单元中。编译器尊重包含文件中给出的定义,但 IDE 不尊重。这会导致在 use 子句中添加某些单元,这些单元可能已经存在 - 包含在 DEFINE 编译器指令中。

因此,如果添加了一个在 Delphi XE3 之前版本中不可用的单元,您将遇到一个大问题,因为如果您让 IDE 添加该单元,并且无法使用没有的 Delphi XE3 之前版本来编译它那个单位。

例如一个项目,其中一个单元上有一个 TActionList。

  1. MYINCLUDE.INC 仅定义一个 {$DEFINE DELPHIXE3}

  2. 示例单元可能看起来像

    unit Unit1;

    {$I MYINCLUDE.INC}

    uses
    Winapi.Windows,
    Winapi.Messages,
    System.SysUtils,
    System.Variants,
    System.Classes,
    Vcl.Graphics,
    Vcl.Controls,
    Vcl.Forms,
    Vcl.Dialogs,
    {$IFDEF DELPHIXE3} System.Actions, {$ENDIF}
    Vcl.ActnList;
    ...
  3. 保存后,IDE 会在使用列表末尾添加 System.Actions,这又会导致标识符重新声明编译器错误。如果您删除它,IDE 将在下次保存时再次添加它。

我刚刚向 QC #111178 报告了这一情况.

该错误有解决方法吗?

基督教

最佳答案

可能最简单的方法是使用单位别名功能来提供帮助。为了使其工作,您需要针对不同的编译器版本进行不同的项目设置。例如,每个受支持的编译器版本都有不同的 .dpr 和 .dproj 文件。

在您的 XE2 项目中,您定义一个单元别名,如下所示:

System.Actions=Vcl.ActnList

在 XE3 项目中,您省略该别名。

然后在您的 .pas 文件中,您可以愉快地使用 System.Actions,在任一版本的 Delphi 中都不会出现问题。

一个更简单的解决方案是创建一个名为 System.Actions 的空单元,您仅将其包含在 XE2 构建的项目中。

关于delphi - 如何有条件地包含某些单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776195/

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