次の方法で共有


DrvConvertDevMode 関数 (winddiui.h)

プリンター インターフェイス DLL の DrvConvertDevMode 関数は、プリンターの DEVMODEW 構造体をあるバージョンから別のバージョンに変換します。

構文

BOOL DrvConvertDevMode(
  [in]      LPTSTR   pPrinterName,
  [in]      PDEVMODE pdmIn,
  [out]     PDEVMODE pdmOut,
  [in, out] PLONG    pcbNeeded,
  [in]      DWORD    fMode
);

パラメーター

[in] pPrinterName

プリンター名文字列への呼び出し元指定のポインター。 このパラメーターの詳細については、次の「解説」セクションを参照してください。

[in] pdmIn

入力 DEVMODEW 構造体への呼び出し元が指定したポインター。 fMode CDM_DRIVER_DEFAULT場合、このポインターは NULL

[out] pdmOut

出力 DEVMODEW 構造体を受け取るバッファーへの呼び出し元指定ポインター。 fMode バッファーに含まれるCDM_CONVERT場合は、入力時に、ターゲット ドライバーのバージョンを示す有効な DEVMODEW 構造体。

[in, out] pcbNeeded

pdmOut が指すバッファーのサイズ (バイト単位) への呼び出し元指定ポインター。 出力時に、プリンター インターフェイス DLL は、受信したサイズの値を変換された DEVMODEW 構造体の実際のサイズで上書きする必要があります。 受信バッファーが小さすぎる場合、プリンター インターフェイス DLL は、必要なバッファー サイズで受信したサイズの値を上書きする必要があります。

[in] fMode

実行する操作の種類を示す呼び出し元指定のビット フラグ。 これには、次のいずれかのフラグを指定できます。

CDM_CONVERT

この関数は、入力 DEVMODEW 構造体 (pdmIn が指す) の内容を新しい DEVMODEW 構造体に変換し、結果を pdmOut 指す DEVMODEW 構造体に配置する必要があります。 出力バージョンを決定するには、受信した出力 DEVMODEW 構造体 (pdmOut によって指される) の初期コンテンツを使用する必要があります。

CDM_CONVERT351

この関数は、入力 DEVMODEW 構造体 (pdmInが指す) の内容を変換し、Windows NT 3.51 と互換性のある出力 DEVMODEW 構造体を作成し、結果を pdmOut 指す DEVMODEW 構造体に配置する必要があります。

ドライバーが Windows NT 3.51 の DEVMODEW 構造体をサポートしていない場合、関数は入力 DEVMODEW を現在のバージョンに変換する必要があります。

CDM_DRIVER_DEFAULT

この関数は、既定の DEVMODEW 構造体の現在のバージョンを、pdmOut 指すバッファーにコピーする必要があります。

戻り値

操作が成功した場合、関数は TRUE 返す必要があります。それ以外の場合は、SetLastError を呼び出してエラー コードを設定し、FALSE 返す必要があります。

備考

クライアント/サーバー環境では、サーバー (スプーラー) が別のバージョンのオペレーティング システムまたはプリンター ドライバーを実行している可能性があります。つまり、プリンターの DEVMODEW 構造体定義がクライアントとサーバーの間で矛盾している可能性があります。 DrvConvertDevMode 関数は、プリンターの DEVMODEW 構造体のあるバージョンから別のバージョンへの変換を実行できる必要があります。

ある DEVMODEW バージョンから別のバージョンに変換する場合は、パブリックとプライベートの両方の DEVMODEW メンバーを含める必要があります。

pPrinterName が指すプリンター名は、OpenPrinter 関数 (Microsoft Windows SDK ドキュメントで説明) への入力引数として使用できます。これは、CDM_DRIVER_DEFAULT フラグを受け取ったときに格納されている既定値を取得するために呼び出すことができます。 openPrinter を呼び出す前に、プリンター名の文字列を変更必要があることに注意してください。 さらに、OpenPrinter の呼び出しは、DrvConvertDevMode 呼び出すために使用されたものと同じスレッド内にある必要があります。

この関数は、pdmInpdmOut (該当する場合) の両方が有効な DEVMODEW 構造体を指していることを確認する必要があります。 そうでない場合、関数は SetLastError(ERROR_INVALID_PARAMETER) を呼び出し、FALSE 返す必要があります。 pcbNeeded で指定された出力 DEVMODEW サイズが小さすぎる場合、ドライバーは、pcbNeeded によって提供されるサイズ値を必要なバッファー サイズで上書きし、SetLastError(ERROR_INSUFFICIENT_BUFFER) を呼び出し、FALSE 返す必要があります。

DrvConvertDevMode 関数はスプーラーのコンテキストで実行されるため、ユーザー インターフェイスを表示することはできません。

バッファー サイズ 取得するために、pdmOut パラメーター内の NULL DEVMODEW 構造体ポインターを使用して DrvConvertDevMode が呼び出されると、ドライバーは最後のエラーを ERROR_INSUFFICIENT_BUFFER に設定することが期待されます。 最後のエラーがこの値に設定されていない場合、スプーラーは一般的なエラーを想定します。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー winddiui.h (Winddiui.h を含む)