预处理器指令
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。
有关详细信息,请参阅新式打印平台和打印支持应用设计指南。
GPD 文件可以包含预处理器指令,这些指令可用于控制 GPD 文件中各部分的条件分析。 下表描述了可在 GPD 文件中使用的预处理器指令。
PreprocessorDirective | 定义 |
---|---|
*Define: SymbolName | 定义符号。 |
*Undefine: SymbolName | 移除以前定义的符号。 |
*Ifdef: SymbolName | 指示 GPD 文件条目块的开头。 如果定义了指定的符号,则 GPD 分析器将处理此指令与下一个 *Ifdef**、*Elseifdef、*Else 或 *Endif 指令之间的 GPD 文件条目。 |
*Elseifdef : SymbolName | 如果定义了指定的符号,并且上一个 *Ifdef 或 *Elseifdef 指令指定的符号未定义,则 GPD 分析器将处理此指令与下一个 *Ifdef、*Elseifdef、*Else 或 *Endif 指令之间的 GPD 文化条目。 |
*Else: | 如果上一个 *Ifdef 或 *Elseifdef 指令指定的符号未定义,则 GPD 分析器将处理此指令与下一个 *Ifdef 或 *Endif 指令之间的 GPD 文件条目。 |
*Endif: | 指示 GPD 文件条目块的结尾。 |
*Include: "FileName" | 指定其他 GPD 文件的名称。 有关详细信息,请参阅在微型驱动程序中使用多个 GPD 文件。 |
*SetPPPrefix : PrefixString | 更改预处理器指令前面附加的前缀字符串。 有关详细信息,请参阅更改预处理器指令前缀部分。 |
可以嵌套条件预处理器指令。 在每个嵌套级别,使用条件预处理器指令的顺序均如下:
*Ifdef: Symbol1 GPD 文件部分
*Elseifdef: Symbol2 GPD 文件部分
*Elseifdef: Symbol3 GPD 文件部分
*Elseifdef: Symbol4 GPD 文件部分
...
*Else: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 约束的 GPD 文件部分中指定该功能:WINNT_51 和 *Endif 指令。