Delphi CompilerVersion 指令问题

Delphi CompilerVersion directive issues

我有一个在 Delphi 5 和 DelphiXE2 之间共享的库代码文件。我正在尝试向代码文件中添加匿名方法功能,但仅限于 DelphiXE2 项目(因为 Delphi 5 不支持匿名方法)。看来我应该可以使用 CompilerVersion(注意:我不想将其限制为 DelphiXE2,以防万一我们升级)。

{$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}

如有任何帮助,我们将不胜感激。

注意:我不能将匿名方法代码移动到不同的代码文件。

按照 documentation 所说的去做:

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

确保外部条件如图所示(并以 ENDIF 结束)并且您可以在内部使用 CompilerVersion 和其他常量和表达式。

您也可以使用

{$IF defined(BLAH)}

或者,我的最爱之一:

{$IF declared(AnsiString)}

等...


FWIW,我注意到 link 中的示例几乎一字不差地来自我的 Console.pas 单元。