预处理器指令

重要

新式打印平台是 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 指令。