预处理器指令

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (PSA) ,在 Windows 10 和 11 中自定义打印体验,以便进行打印机设备开发。

有关详细信息,请参阅 打印支持应用设计指南

GPD 文件可以包含预处理器指令,这些指令可用于控制 GPD 文件中各节的条件分析。 下表描述了可用于 GPD 文件的预处理器指令。

PreprocessorDirective 定义
*定义SymbolName 定义符号。
*UndefineSymbolName 删除以前定义的符号。
*IfdefSymbolName 指示 GPD 文件条目块的开头。

如果定义了指定的符号,则 GPD 分析程序将处理此指令与下一 *Ifdef**、*Elseifdef、*Else 或 *Endif 指令之间的 GPD 文件条目。
*ElseifdefSymbolName 如果定义了指定的符号,并且上一个 *Ifdef 或 *Elseifdef 指令指定的符号未定义,则此指令与下一个 *Ifdef*Elseifdef、*Elseif 或 *Endif 指令之间的 GPD 文件条目将由 GPD 分析程序处理。
*否则 如果上一个 *Ifdef 或 *Elseifdef 指令指定的符号未定义,则此指令与下一 *Ifdef 或 *Endif 指令之间的 GPD 文件条目将由 GPD 分析程序处理。
*Endif 指示 GPD 文件条目块的结尾。
*包括:“FileName 指定其他 GPD 文件的名称。 有关详细信息,请参阅 在微型驱动程序中使用多个 GPD 文件
*SetPPPrefixPrefixString 更改预处理器指令前面附加的前缀字符串。 有关详细信息,请参阅 更改预处理器指令前缀 部分。

条件预处理器指令可以嵌套。 在每个嵌套级别,使用条件预处理器指令的顺序如下所示:

*IfdefSymbol1 GPD 文件部分

*ElseifdefSymbol2 GPD 文件部分

*ElseifdefSymbol3 GPD 文件部分

*ElseifdefSymbol4 GPD 文件部分

...

*否则:GPD 文件部分

*Endif

对于使用的每个 Ifdef 指令,*Endif 是必需的。 *Elseifdef 和 *Else 指令是可选的。 每个 GPD 文件节可以包含 GPD 文件条目,也可以包含条件预处理器指令的嵌套序列。

使用 *Define 定义的所有符号将保持定义状态,直到使用 *Undefine 显式未定义。

*Include 指令允许您指定其他 GPD 文件的名称。 有关详细信息,请参阅 在微型驱动程序中使用多个 GPD 文件

请注意,*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 文件可能包含与 Windows 2000 支持的以星号为前缀的预处理器指令冲突的 GPD 文件条目。 通过更改前缀,为将来的操作系统版本编写的 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:

请注意,此方法仅更改预处理器查找的前缀。 分析程序识别的关键字必须始终以星号开头。

预定义的预处理器符号

Microsoft 定义了以下预处理器符号。

符号 定义位置 定义
WINNT_51 适用于 Windows XP 的 GPD 预处理器 环境为 Windows XP。
WINNT_50 适用于 Windows XP 和 Windows 2000 的 GPD 预处理器 环境为 Windows 2000。
WINNT_40 适用于 Windows XP、Windows 2000 和 Windows NT 4.0 的 GPD 预处理器 环境Windows NT 4.0。
PARSER_VER_1.0 适用于 Windows NT 4.0、Windows 2000 和 Windows XP 的 GPD 预处理器 GPD 分析程序版本 1.0

WINNT_40、WINNT_50和WINNT_51符号可用于创建与 Windows NT 4.0、Windows 2000 和 Windows XP 兼容的 GPD 文件。 例如,如果 Windows XP 支持 Windows 2000 不支持的打印机功能,则可以在由 *Ifdef: WINNT_51 和 *Endif 指令绑定的 GPD 文件节中指定该功能。