Wenn Sie Delphi-Code schreiben möchten, der mit mehreren Versionen des Delphi-Compilers funktionieren soll, müssen Sie wissen, unter welchen Versionen Ihr Code kompiliert wird.
Angenommen, Sie schreiben Ihre eigene kommerzielle benutzerdefinierte Komponente. Benutzer Ihrer Komponente haben möglicherweise andere Delphi-Versionen als Sie. Wenn sie versuchen, den Code der Komponente - Ihren Code - neu zu kompilieren, sind sie möglicherweise in Schwierigkeiten! Was ist, wenn Sie Standardparameter in Ihren Funktionen verwenden und der Benutzer Delphi 3 hat??
Compiler-Direktiven sind spezielle Syntaxkommentare, mit denen wir die Funktionen des Delphi-Compilers steuern können. Der Delphi-Compiler verfügt über drei Arten von Anweisungen: sHexenanweisungen, Parameteranweisungen und bedingte Anweisungen. Mit der bedingten Kompilierung können wir selektiv Teile eines Quellcodes kompilieren, abhängig von den festgelegten Bedingungen.
Die Compiler-Direktive $ IfDef startet einen bedingten Kompilierungsabschnitt.
Die Syntax sieht folgendermaßen aus:
$ IfDef DefName
…
$ Else
…
$ EndIf
Das DefName präsentiert das sogenannte bedingte Symbol. Delphi definiert mehrere bedingte Standardsymbole. Wenn im obigen "Code" der DefName definiert ist, den obigen Code $ Else wird kompiliert.
Die Anweisung $ IfDef wird häufig zum Testen der Version des Delphi-Compilers verwendet. In der folgenden Liste sind die Symbole aufgeführt, die beim bedingten Kompilieren für eine bestimmte Version des Delphi-Compilers überprüft werden müssen:
Wenn Sie die obigen Symbole kennen, können Sie Code schreiben, der mit mehreren Delphi-Versionen funktioniert, indem Sie Compiler-Direktiven verwenden, um den entsprechenden Quellcode für jede Version zu kompilieren.
Hinweis: Das Symbol VER185 wird beispielsweise verwendet, um den Delphi 2007-Compiler oder eine frühere Version anzuzeigen.
Es ist durchaus üblich (und wünschenswert), dass jede neue Delphi-Version der Sprache mehrere neue RTL-Routinen hinzufügt.
Die in Delphi 5 eingeführte IncludeTrailingBackslash-Funktion fügt beispielsweise "\" an das Ende eines Strings an, wenn dieser noch nicht vorhanden ist. Im Delphi MP3-Projekt habe ich diese Funktion verwendet und einige Leser haben sich beschwert, dass sie das Projekt nicht kompilieren können - sie haben eine Delphi-Version vor Delphi 5.
Eine Möglichkeit, dieses Problem zu lösen, besteht darin, eine eigene Version dieser Routine zu erstellen - die AddLastBackSlash-Funktion. Wenn das Projekt unter Delphi 5 kompiliert werden soll, wird der IncludeTrailingBackslash aufgerufen. Wenn einige der vorherigen Delphi-Versionen verwendet werden, simulieren wir die IncludeTrailingBackslash-Funktion.
Es könnte ungefähr so aussehen: