energ1ser
energ1ser

Reputation: 2883

Delphi CompilerVersion directive issues

I have a library code file which is shared between Delphi 5 and DelphiXE2. I am attempting to add anonymous method functionality to the code file, but only for DelphiXE2 projects (since Delphi 5 doesn't support anonymous methods). It seemed I should be able to use the CompilerVersion (Note: I don't want to limit it to DelphiXE2, just in case we ever upgrade).

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

This worked nicely in XE2, but it turns out, Delphi 5 doesn't support the $IF directive. I decided to wrap it in an $IFDEF. This worked nicely in Delphi 5, but XE2 also doesn't seem to have CompilerVersion defined, so AnonymousAvail is not defined.

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

Any help would be appreciated.

Note: I cannot move anonymous method code to a different code file.

Upvotes: 1

Views: 1797

Answers (1)

Rudy Velthuis
Rudy Velthuis

Reputation: 28846

Do what the documentation says:

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

Be sure that the outer condition is as shown (and closed with ENDIF) and you can use CompilerVersion and other constants and expressions inside.

You can also use

{$IF defined(BLAH)}

or, one of my favourites:

{$IF declared(AnsiString)}

etc...


FWIW, I noticed that the example in the link comes, almost verbatim, from my Console.pas unit.

Upvotes: 8

Related Questions