Delphi CompilerVersion指令问题

ene*_*ser 1 delphi compiler-directives delphi-5 delphi-xe2

我有一个库代码文件,在Delphi 5和DelphiXE2之间共享.我试图在代码文件中添加匿名方法功能,但仅适用于DelphiXE2项目(因为Delphi 5不支持匿名方法).我似乎应该可以使用CompilerVersion(注意:我不想将它限制为DelphiXE2,以防我们升级).

{$IF CompilerVersion >= 23}
  {$DEFINE AnonymousAvail}
{$IFEND}
Run Code Online (Sandbox Code Playgroud)

这在XE2中运行良好,但事实证明,Delphi 5不支持$ IF指令.我决定将它包装在$ IFDEF中.这在Delphi 5中运行良好,但XE2似乎也没有定义CompilerVersion,因此AnonymousAvail没有定义.

{$IFDEF CompilerVersion}
  {$IF CompilerVersion >= 23}
    {$DEFINE AnonymousAvail}
  {$IFEND}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

注意:我无法将匿名方法代码移动到其他代码文件.

Rud*_*uis 8

文件说的话:

{$IFDEF ConditionalExpressions}
  {$IF CompilerVersion >= 23.0}
    {$DEFINE AnonymousAvailable}
  {$IFEND}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

确保外部条件如图所示(并使用ENDIF关闭),您可以在其中使用CompilerVersion和其他常量和表达式.

你也可以使用

{$IF defined(BLAH)}
Run Code Online (Sandbox Code Playgroud)

或者,我最喜欢的一个:

{$IF declared(AnsiString)}
Run Code Online (Sandbox Code Playgroud)

等等...


FWIW,我注意到链接中的示例几乎是逐字逐句来自我的Console.pas单元.