プリプロセッサ ディレクティブ
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください。
GPD ファイルにはプリプロセッサ ディレクティブを含めることができます。これは、GPD ファイル内のセクションの条件付き解析を制御するために使用できます。 次の表では、GPD ファイルで使用できるプリプロセッサ ディレクティブについて説明します。
PreprocessorDirective | Definition |
---|---|
*定義: SymbolName | シンボルを定義します。 |
*未定義: SymbolName | 以前に定義したシンボルを削除します。 |
*Ifdef: SymbolName | GPD ファイル エントリのブロックの先頭を示します。 指定したシンボルが定義されている場合、このディレクティブと次の *Ifdef**、*Elseifdef、*Else、または *Endif ディレクティブの間の GPD ファイル エントリは、GPD パーサーによって処理されます。 |
*Elseifdef : SymbolName | 指定したシンボルが定義されていて、前の *Ifdef ディレクティブまたは *Elseifdef ディレクティブで指定されたシンボルが未定義の場合、このディレクティブと次の *Ifdef、*Elseifdef、*Else、または *Endif ディレクティブの間の GPD ファイル エントリは GPD パーサーによって処理されます。 |
*Else。 | 前の *Ifdef ディレクティブまたは *Elseifdef ディレクティブで指定されたシンボルが未定義の場合、このディレクティブと次の *Ifdef または *Endif ディレクティブの間の GPD ファイル 項目は GPD パーサーによって処理されます。 |
*Endif。 | GPD ファイル エントリのブロックの末尾を示します。 |
*含める: "FileName" | 追加の GPD ファイルの名前を指定します。 詳細については、「ミニドライバーでの複数の GPD ファイルの使用」を参照してください。 |
*SetPPPrefix : PrefixString | プリプロセッサ ディレクティブの前に付加されたプレフィックス文字列を変更します。 詳細については「プリプロセッサ ディレクティブ プレフィックスの変更」セクションを参照してください。 |
条件付きプリプロセッサ ディレクティブは入れ子にすることができます。 各入れ子レベルでは、条件付きプリプロセッサ ディレクティブを使用するためのシーケンスは次のとおりです。
*Ifdef: Symbol1 GPD ファイル セクション
*Elseifdef: Symbol2 GPD ファイル セクション
*Elseifdef: Symbol3 GPD ファイル セクション
*Elseifdef: Symbol4 GPD ファイル セクション
...
*Else: GPD file セクション
*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 では、次のプリプロセッサ シンボルを定義しています。
記号 | 定義されている場所 | Definition |
---|---|---|
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 ファイル セクション内で指定できます。