Om du planerar att skriva Delphi-kod som ska fungera med flera versioner av Delphi-kompilatorn måste du veta under vilka versioner din kod blir kompilerad.
Anta att du skriver din egen kommersiella anpassade komponent. Användare av din komponent kan ha andra Delphi-versioner än du har. Om de försöker kompilera komponentens kod, din kod, kan de ha problem! Tänk om du använder standardparametrar i dina funktioner och användaren har Delphi 3?
Compiler-direktiv är speciella syntaxkommentarer som vi kan använda för att kontrollera funktionerna i Delphi-kompilatorn. Delphi-kompilatorn har tre typer av direktiv: shäxedirektiv, parameterdirektiv och villkorade direktiv. Villkorlig sammanställning låter oss selektivt sammanställa delar av en källkod beroende på vilka villkor som ställs in.
Kompilatordirektivet för $ IfDef startar en villkorlig kompilationsdel.
Syntaxen ser ut som:
$ IfDef DefName
...
$ Else
...
$ EndIf
De DefName presenterar den så kallade villkorade symbolen. Delphi definierar flera standardvillkorade symboler. I "koden" ovan, om DefName definieras koden ovan $ Else blir sammanställd.
En vanlig användning för $ IfDef-direktivet är att testa versionen av Delphi-kompilatorn. Följande lista visar symbolerna som ska kontrolleras när man vill kompilera för en viss version av Delphi-kompilatorn:
Genom att känna till symbolerna ovan är det möjligt att skriva kod som fungerar med flera versioner av Delphi genom att använda kompilatordirektiv för att sammanställa lämplig källkod för varje version.
Obs: till exempel symbol VER185 används för att indikera Delphi 2007-kompilator eller en tidigare version.
Det är ganska vanligt (och önskvärt) för varje ny Delphi-version att lägga till flera nya RTL-rutiner till språket.
Till exempel, IncludeTrailingBackslash-funktionen, introducerad i Delphi 5, lägger till "\" i slutet av en sträng om den inte redan finns där. I Delphi MP3-projektet har jag använt den här funktionen och flera läsare har klagat över att de inte kan kompilera projektet - de har någon Delphi-version före Delphi 5.
Ett sätt att lösa detta problem är att skapa din egen version av den här rutinen - AddLastBackSlash-funktionen. Om projektet ska sammanställas på Delphi 5 kallas IncludeTrailingBackslash. Om några av de tidigare Delphi-versionerna används, simulerar vi funktionen IncludeTrailingBackslash.
Det kan se ut som: