2015-02-09 46 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