2015-02-09 45 views
1

我有一個庫文件,它是在Delphi 5和DelphiXE2之間共享的。我正在嘗試向代碼文件添加匿名方法功能,但僅限於DelphiXE2項目(因爲Delphi 5不支持匿名方法)。看起來我應該可以使用CompilerVersion(注意:我不想將它限制在DelphiXE2中,以防萬一我們升級)。Delphi CompilerVersion指令問題

{$IF CompilerVersion >= 23} 
    {$DEFINE AnonymousAvail} 
{$IFEND} 

這在XE2中很好地工作,但事實證明,Delphi 5不支持$ IF指令。我決定把它包裝在一個$ IFDEF中。這在Delphi 5中很好地工作,但XE2似乎也沒有定義CompilerVersion,所以AnonymousAvail沒有定義。

{$IFDEF CompilerVersion} 
    {$IF CompilerVersion >= 23} 
    {$DEFINE AnonymousAvail} 
    {$IFEND} 
{$ENDIF} 

任何幫助,將不勝感激。

注意:我不能將匿名方法代碼移動到不同的代碼文件。

+0

如果您刪除了{$ IFDEF CompilerVersion}塊,它是否適用於Delphi 5? – Jason 2015-02-09 02:06:50

+0

沒有在Delphi 5中不起作用 – energ1ser 2015-02-09 02:15:11

回答

8

做了什麼documentation說:

{$IFDEF ConditionalExpressions} 
    {$IF CompilerVersion >= 23.0} 
    {$DEFINE AnonymousAvailable} 
    {$IFEND} 
{$ENDIF} 

確保外部條件是如圖所示(與ENDIF關閉),你可以使用CompilerVersion等常量和表達式中。

您還可以使用

{$IF defined(BLAH)} 

,或者一個我的最愛:

{$IF declared(AnsiString)} 

等等


FWIW,我注意到,在鏈接的例子幾乎是逐字地從我的Console.pas單位。

+1

@SertacAkyuz是的,我誤讀了第二段。所以基本上我正在檢查是否需要檢查某個預定義的條件時定義了一個常量。 – energ1ser 2015-02-09 02:25:17

+0

您可以檢查是否定義了常量,甚至查詢其值。 CompilerVersion是一個正常的Pascal常量,它不是一個預定義的條件。 – 2015-02-09 07:55:41