Präprozessordirektiven

Wichtig

Die moderne Druckplattform ist das bevorzugte Mittel von Windows, um mit Druckern zu kommunizieren. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.

Weitere Informationen finden Sie unter Moderne Druckplattform und im Entwurfsleitfaden für die Druckunterstützungs-App.

GPD-Dateien können Vorverarbeitungsdirektiven enthalten, mit denen Sie das bedingte Parsen von Abschnitten innerhalb der GPD-Datei steuern können. Die folgende Tabelle beschreibt die Vorverarbeitungsdirektiven, die in GPD-Dateien verwendet werden können.

PreprocessorDirective Definition
*Define: SymbolName Definiert ein Symbol.
*Undefine: SymbolName Entfernt ein zuvor definiertes Symbol.
*Ifdef: SymbolName Zeigt den Beginn eines Blocks von GPD-Dateieinträgen an.

Wenn das angegebene Symbol definiert ist, werden die GPD-Dateieinträge zwischen dieser Direktive und der nächsten *Ifdef**, *Elseifdef, *Elseoder *Endif Direktive vom GPD-Parser verarbeitet.
*Elseifdef : SymbolName Wenn das angegebene Symbol definiert ist und das von der vorhergehenden Direktive *Ifdef oder *Elseifdef angegebene Symbol undefiniert ist, werden die GPD-Dateieinträge zwischen dieser Direktive und der nächsten *Ifdef, *Elseifdef, *Elseoder *Endif Direktive vom GPD-Parser verarbeitet.
*Else: Wenn das von der vorherigen *Ifdef oder *Elseifdef Direktive angegebene Symbol undefiniert ist, werden die GPD-Dateieinträge zwischen dieser Direktive und der nächsten *Ifdef oder *Endif Direktive vom GPD-Parser verarbeitet.
*Endif: Zeigt das Ende eines Blocks von GPD-Dateieinträgen an.
*Include: "FileName" Gibt den Namen einer zusätzlichen GPD-Datei an. Weitere Informationen finden Sie unter Verwenden mehrerer GPD-Dateien in einem Minidriver.
*SetPPPrefix : PrefixString Ändert die Präfix-Zeichenfolge, die den Vorverarbeitungsdirektiven vorangestellt wird. Weitere Informationen finden Sie im Abschnitt Ändern des Präprozessor-Direktiven-Präfixes .

Bedingte Präprozessoranweisungen können verschachtelt werden. Auf jeder Verschachtelungsebene ist die Reihenfolge für die Verwendung bedingter Präprozessoranweisungen wie folgt:

*Ifdef: Symbol1 GPD-Dateiabschnitt

*Elseifdef: Symbol2 GPD-Dateiabschnitt

*Elseifdef: Symbol3 GPD-Dateiabschnitt

*Elseifdef: Symbol4 GPD-Dateiabschnitt

...

*Else: GPD-Dateiabschnitt

*Endif:

Für jede verwendete *Ifdef Direktive ist *Endif erforderlich. Die Direktiven *Elseifdef und *Else sind optional. Jeder GPD-Dateiabschnitt kann GPD-Dateieinträge und optional eine verschachtelte Folge von bedingten Präprozessoranweisungen enthalten.

Alle Symbole, die mit *Define definiert wurden, bleiben definiert, bis sie mit *Undefineexplizit undefiniert werden.

Mit der Direktive *Include können Sie den Namen einer zusätzlichen GPD-Datei angeben. Weitere Informationen finden Sie unter Verwenden mehrerer GPD-Dateien in einem Minidriver.

Beachten Sie, dass der GPD-Eintrag *IgnoreBlock keine Auswirkungen auf Präprozessor-Direktiven hat, da der Präprozessor vor dem GPD-Parser ausgeführt wird.

Ändern des Vorverarbeitungsdirektiven-Präfixes

Mit der Direktive *SetPPPrefix können Sie das Präfix ändern, das bei Vorverarbeitungsdirektiven verwendet wird. Das heißt, Sie können diese Direktive verwenden, um das Sternchen (*), das den Vorverarbeitungsdirektiven vorangestellt ist, durch ein anderes Zeichen oder eine andere Zeichenfolge zu ersetzen.

Wenn Ihre GPD-Datei zum Beispiel die folgende Anweisung enthält:

*SetPPPrefix: #SpecialPrefix#

dann hört der Präprozessor auf, nach Vorverarbeitungsdirektiven zu suchen, die mit * beginnen und sucht stattdessen nach Direktiven, die mit #SpecialPrefix#beginnen. Die folgende Sequenz ändert den Präprozessor-Präfix vorübergehend in #SpecialPrefix#und stellt ihn dann in *wieder her.

*SetPPPrefix: #SpecialPrefix#
#SpecialPrefix#Ifdef: WINNT_50
#SpecialPrefix#Include: "ExtraGPD.gpd"
#SpecialPrefix#Endif:
#SpecialPrefix#SetPPPrefix: *

Der Hauptzweck dieser Funktion besteht darin, GPD-Dateien, die für zukünftige Betriebssystemversionen geschrieben wurden, mit Windows 2000 kompatibel zu machen. Nehmen wir zum Beispiel an, dass GPD-Dateien für eine zukünftige Version des Betriebssystems GPD-Dateieinträge enthalten können, die mit den von Windows 2000 unterstützten Präprozessor-Direktiven mit Asterisk-Präfix in Konflikt stehen. Durch Änderung des Präfixes kann eine GPD-Datei, die für die zukünftige Betriebssystemversion geschrieben wurde, auch unter Windows 2000 verwendet werden. Ein Beispiel könnte wie folgt aufgebaut sein:

*Ifdef: WINNT_70
    *SetPPPrefix: #SpecialPrefix#
    *% Do special, OS-specific processing of
    *% GPD file entries that might conflict with
    *% asterisk-prefixed preprocessor directives.
    #SpecialPrefix#SetPPPrefix: *
*Endif:

Beachten Sie, dass diese Technik nur das Präfix ändert, nach dem der Präprozessor sucht. Den vom Parser erkannten Schlüsselwörtern muss immer ein Sternchen vorangestellt werden.

Vordefinierte Präprozessor-Symbole

Microsoft definiert die folgenden Präprozessor-Symbole.

Symbol Wo Definiert Definition
WINNT_51 GPD-Präprozessor für Windows XP Die Umgebung ist Windows XP.
WINNT_50 GPD-Präprozessor für Windows XP und Windows 2000 Die Umgebung ist Windows 2000.
WINNT_40 GPD-Präprozessoren für Windows XP, Windows 2000 und Windows NT 4.0 Die Umgebung ist Windows NT 4.0.
PARSER_VER_1.0 GPD preprocessors for Windows NT 4.0, Windows 2000 und Windows XP GPD-Parser Version 1.0

Die Symbole WINNT_40, WINNT_50 und WINNT_51 sind nützlich für die Erstellung von GPD-Dateien, die mit Windows NT 4.0, Windows 2000 und Windows XP kompatibel sind. Wenn z.B. Windows XP eine Druckerfunktion unterstützt, die von Windows 2000 nicht unterstützt wird, kann diese Funktion in einem GPD-Dateiabschnitt angegeben werden, der durch *Ifdef: WINNT_51 and *Endif-Direktiven begrenzt ist.