2012-12-08 83 views
7

我有不同的定義語句來處理包含文件中的不同Delphi版本。這個包含文件是「包含」在一個單元中的。編譯器尊重包含文件中給出的定義,但不支持IDE。這導致在uses語句中增加了某些單元,這些單元可能已經存在 - 被包含在DEFINE編譯器指令中。如何有條件地包含一些單元

因此,如果添加一個在Delphi XE3之前不可用的單元,您將遇到很大的問題,因爲如果您讓IDE添加該單元並且無法用預先創建的Delphi XE3版本進行編譯有這個單位。

E.g.一個項目帶有一個單位,其上有一個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

有沒有解決該錯誤的方法?

Christian

+1

IDE一直有點糟糕的解析條件。我希望你的質量控制報告按照設計完成。這個問題一再被提出,總是有同樣的迴應。 –

+0

IDE總是在* .dpk文件中損壞條件,但這個問題是令人失望的新事物。 – kludg

+0

@Serg它也一直在.pas文件中表現這種方式。這裏沒有新東西。從此永遠如此。 –

回答

3

可能最簡單的做法是使用單位別名功能來提供幫助。爲了這個工作,你需要不同的編譯器版本的不同的項目設置。例如,對於每個受支持的編譯器版本,不同的.dpr和.dproj文件。

在你XE2工程中定義一個單元別名,像這樣:

System.Actions=Vcl.ActnList 

在XE3項目你忽略該別名。

然後在您的.pas文件中,您可以愉快地使用System.Actions而不會在任何版本的Delphi中出現問題。

一個更簡單的解決方案是創建一個名爲System.Actions的空單元,只包含在項目中用於XE2構建。

+0

是的,這聽起來是最容易/最乾淨的解決方法。謝謝。 – Christian

相關問題