Директивы препроцессора
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Файлы GPD могут содержать директивы препроцессора, которые можно использовать для управления условным анализом разделов в файле GPD. В следующей таблице описываются директивы препроцессора, которые можно использовать в файлах GPD.
PreprocessorDirective | Определение |
---|---|
*Определение: SymbolName | Определяет символ. |
*Undefine: SymbolName | Удаляет ранее определенный символ. |
*Ifdef: SymbolName | Указывает начало блока записей GPD-файлов. Если определен указанный символ, то записи файла GPD между этой директивой и следующей директивой *Ifdef*, *Elseifdef, *Elseifdef, *Else или *Endif директива обрабатываются анализатором GPD. |
*Elseifdef : SymbolName | Если определен указанный символ, а символ, указанный предыдущей директивой *Ifdef или *Elseifdef, не определен, записи файла GPD между этой директивой и следующим *Ifdef, *Elseifdef, *Elseifdef или *Endifif директива обрабатываются синтаксического анализа GPD. |
*Else: | Если символ, указанный предыдущей директивой *Ifdef или *Elseifdef , не определен, то записи файла GPD между этой директивой и следующей директивой *Ifdef или *Endif обрабатываются средством синтаксического анализа GPD. |
*Endif: | Указывает конец блока записей GPD-файла. |
*Include: "FileName" | Указывает имя дополнительного файла GPD. Дополнительные сведения см. в разделе "Использование нескольких файлов GPD" в мини-driver. |
*SetPPPrefix : PrefixString | Изменяет строку префикса, предопределенную директивами препроцессора. Дополнительные сведения см. в разделе "Изменение префикса директивы препроцессора ". |
Директивы условного препроцессора можно вложить. На каждом уровне вложения последовательность для использования директив условного препроцессора выглядит следующим образом:
*Ifdef: раздел файла GPD symbol1
*Elseifdef: раздел файла GPD Symbol2
*Elseifdef: раздел файла Symbol3 GPD
*Elseifdef: раздел файла GPD символа 4
...
*Else: раздел файла GPD
*Endif:
Для каждой используемой директивы *Ifdef требуется *Endif . Директивы *Elseifdef и *Else являются необязательными. Каждый раздел файла GPD может содержать записи файлов GPD и, при необходимости, вложенную последовательность директив условного препроцессора.
Все символы, определенные с помощью *Define , остаются определенными до тех пор, пока явно не определены с помощью *Undefine.
Директива *Include позволяет указать имя дополнительного файла GPD. Дополнительные сведения см. в разделе "Использование нескольких файлов GPD" в мини-driver.
Обратите внимание, что запись *IgnoreBlock GPD не влияет на директивы препроцессора, так как препроцессор выполняется перед синтаксический анализ GPD.
Изменение префикса директивы препроцессора
Директива *SetPPPrefix позволяет изменить префикс, используемый с директивами препроцессора. То есть эту директиву можно использовать для замены символа звездочки (*), который добавляет директивы препроцессора другим символом или строкой.
Например, если файл GPD содержит следующую директиву:
*SetPPPrefix: #SpecialPrefix#
затем препроцессор останавливает поиск директив препроцессора, которые начинаются с и вместо этого ищут директивы, начиная с * #SpecialPrefix#. Следующая последовательность временно изменяет префикс препроцессора на #SpecialPrefix#, а затем восстанавливает его *в .
*SetPPPrefix: #SpecialPrefix#
#SpecialPrefix#Ifdef: WINNT_50
#SpecialPrefix#Include: "ExtraGPD.gpd"
#SpecialPrefix#Endif:
#SpecialPrefix#SetPPPrefix: *
Основной целью этой функции является разрешение GPD-файлов, написанных для будущих версий операционной системы, совместимых с Windows 2000. Например, предположим, что GPD-файлы для будущей версии операционной системы могут включать записи GPD-файлов, конфликтующие с директивами препроцессора с префиксом звездочки, поддерживаемыми Windows 2000. Изменив префикс, файл GPD, написанный для будущей версии операционной системы, также можно использовать с Windows 2000. Пример может быть создан следующим образом:
*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:
Обратите внимание, что этот метод изменяет префикс, который ищет препроцессор. Ключевые слова, распознаваемые синтаксического анализатора, всегда должны предшествовать звездочку.
Предопределенные символы препроцессора
Корпорация Майкрософт определяет следующие символы препроцессора.
Символ | Где определено | Определение |
---|---|---|
WINNT_51 | Препроцессор GPD для Windows XP | Среда Windows XP. |
WINNT_50 | Препроцессор GPD для Windows XP и Windows 2000 | Среда — Windows 2000. |
WINNT_40 | Препроцессоры GPD для Windows XP, Windows 2000 и Windows NT 4.0 | Среда — Windows NT 4.0. |
PARSER_VER_1.0 | Препроцессоры GPD для Windows NT 4.0, Windows 2000 и Windows XP | Синтаксический анализатор GPD версии 1.0 |
Символы WINNT_40, WINNT_50 и WINNT_51 полезны для создания файлов GPD, совместимых с Windows NT 4.0, Windows 2000 и Windows XP. Если, например, Windows XP поддерживает возможность принтера, которая не поддерживается Windows 2000, эта возможность может быть указана в разделе файла GPD, привязанном к *Ifdef: WINNT_51 и *Endif директивам.