7

我有各种定义语句来处理包含文件中的不同 Delphi 版本。该包含文件被“包含”在一个单元中。编译器遵守包含文件中给出的定义,但 IDE 不遵守。这导致向uses 子句添加某些单元,这些单元可能已经存在 - 包含在 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报告了这一点。

该错误是否有解决方法?

基督教

4

1 回答 1

3

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

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

System.Actions=Vcl.ActnList

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

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

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

于 2012-12-08T09:38:56.083 回答