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

函数应将 pdmIn) 指向 (输入 DEVMODEW 结构的内容转换为新的 DEVMODEW 结构,并将结果置于 pdmOut 指向的 DEVMODEW 结构中。 应使用 pdmOut () 指向的接收输出 DEVMODEW 结构的初始内容来确定输出版本。

CDM_CONVERT351

函数应转换 pdmIn) 指向 (输入 DEVMODEW 结构的内容,创建与 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。 如果 由 (ERROR_INSUFFICIENT_BUFFER) 指定的输出 DEVMODEW 大小太小,驱动程序应用所需的缓冲区大小覆盖 由印刷机 提供的大小值,调用 SetLastError (ERROR_INSUFFICIENT_BUFFER) ,并返回 FALSE

DrvConvertDevMode 函数在后台处理程序的上下文中运行,因此不得显示用户界面。

当使用 pdmOut 参数中的 NULL DEVMODEW 结构指针调用 DrvConvertDevMode 以获取缓冲区大小时,驱动程序应将最后一个错误设置为ERROR_INSUFFICIENT_BUFFER。 如果未将上一个错误设置为此值,则后台处理程序会假定出现一般错误。

要求

要求
目标平台 桌面
标头 winddiui.h (包括 Winddiui.h)