Поделиться через


Директивы препроцессора

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами 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 директивам.