Partager via


Directives de préprocesseur

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Les fichiers GPD peuvent contenir des directives du préprocesseur, qui peuvent être utilisées pour contrôler l’analyse conditionnelle des sections à l’intérieur du fichier GPD. Le tableau suivant décrit les directives du préprocesseur qui peuvent être utilisées dans les fichiers GPD.

PreprocessorDirective Définition
*Define: SymbolName Définit un symbole.
*Undefine: SymbolName Supprime un symbole précédemment défini.
*Ifdef: SymbolName Indique le début d’un bloc d’entrées de fichier GPD.

Si le symbole spécifié est défini, les entrées de fichier GPD entre cette directive et la prochaine directive *Ifdef**, *Elseifdef, *Else, ou *Endif sont traitées par le parseur GPD.
*Elseifdef : SymbolName Si le symbole spécifié est défini, et que le symbole spécifié par la directive précédente *Ifdef ou *Elseifdef est indéfini, les entrées de fichier GPD entre cette directive et la prochaine directive **Ifdef, *Elseifdef, *Else, ou *Endif sont traitées par le parseur GPD.
*Else: Si le symbole spécifié par la directive précédente *Ifdef ou *Elseifdef est indéfini, les entrées de fichier GPD entre cette directive et la prochaine directive *Ifdef ou *Endif sont traitées par le parseur GPD.
*Endif: Indique la fin d’un bloc d’entrées de fichier GPD.
*Include: "FileName" Spécifie le nom d’un fichier GPD supplémentaire. Pour plus d’informations, veuillez consulter la section Utilisation de plusieurs fichiers GPD dans un minipilote.
*SetPPPrefix : PrefixString Modifie la chaîne de préfixe ajoutée aux directives du préprocesseur. Pour plus d’informations, voir la section Modification du préfixe de la directive du préprocesseur.

Les directives conditionnelles du préprocesseur peuvent être imbriquées. À chaque niveau d’imbrication, la séquence d’utilisation des directives conditionnelles du préprocesseur est la suivante :

*Ifdef: Symbol1 section de fichier GPD

*Elseifdef: Symbol2 section de fichier GPD

*Elseifdef: Symbol3 section de fichier GPD

*Elseifdef: Symbol4 section de fichier GPD

...

*Else : section de ficher GPD

*Endif:

Pour chaque directive *Ifdef utilisée, *Endif est requis. Les directives *Elseifdef et *Else sont facultatives. Chaque section de fichier GPD peut contenir des entrées de fichier GPD et, éventuellement, une séquence imbriquée de directives conditionnelles du préprocesseur.

Tous les symboles définis à l’aide de *Define restent définis jusqu’à ce qu’ils soient explicitement annulés à l’aide de *Undefine.

La directive *Include vous permet de spécifier le nom d’un fichier GPD supplémentaire. Pour plus d’informations, veuillez consulter la section Utilisation de plusieurs fichiers GPD dans un minipilote.

Notez que l’entrée GPD *IgnoreBlock n’affecte pas les directives du préprocesseur, car le préprocesseur s’exécute avant le parseur GPD.

Modification du préfixe de la directive du préprocesseur

La directive *SetPPPrefix vous permet de modifier le préfixe utilisé avec les directives du préprocesseur. Autrement dit, vous pouvez utiliser cette directive pour remplacer le caractère astérisque (*) qui précède les directives du préprocesseur par un autre caractère ou une autre chaîne.

Par exemple, si votre fichier GPD contient la directive suivante :

*SetPPPrefix: #SpecialPrefix#

alors le préprocesseur cesse de rechercher des directives du préprocesseur qui commencent par * et recherche à la place des directives commençant par #PréfixeSpécial#. La séquence suivante change temporairement le préfixe du préprocesseur en #PréfixeSpécial#, puis le rétablit à *.

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

Le principal objectif de cette fonctionnalité est de permettre aux fichiers GPD écrits pour les futures versions du système d’exploitation d’être compatibles avec Windows 2000. Par exemple, supposons que les fichiers GPD pour une future version du système d’exploitation puissent inclure des entrées de fichier GPD qui entrent en conflit avec les directives du préprocesseur préfixées par un astérisque prises en charge par Windows 2000. En modifiant le préfixe, un fichier GPD écrit pour la future version du système d’exploitation peut également être utilisé avec Windows 2000. Un exemple pourrait être construit comme suit :

*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:

Notez que cette technique ne change que le préfixe que le préprocesseur recherche. Les mots-clés reconnus par le parseur doivent toujours être précédés d’un astérisque.

Symboles de préprocesseur prédéfinis

Microsoft définit les symboles de préprocesseur suivants.

Symbole Où défini Définition
WINNT_51 Préprocesseur GPD pour Windows XP L’environnement est Windows XP.
WINNT_50 Préprocesseur GPD pour Windows XP et Windows 2000 L’environnement est Windows 2000.
WINNT_40 Préprocesseurs GPD pour Windows XP, Windows 2000 et Windows NT 4.0 L’environnement est Windows NT 4.0.
PARSER_VER_1.0 Préprocesseurs GPD pour Windows NT 4.0, Windows 2000 et Windows XP Version du parseur GPD 1.0

Les symboles WINNT_40, WINNT_50 et WINNT_51 sont utiles pour créer des fichiers GPD compatibles avec Windows NT 4.0, Windows 2000 et Windows XP. Par exemple, si Windows XP prend en charge une fonctionnalité d’imprimante qui n’est pas prise en charge par Windows 2000, cette fonctionnalité peut être spécifiée dans une section de fichier GPD délimitée par les directives *Ifdef: WINNT_51 et *Endif.