PTConvertPrintTicketToDevMode 函数 (prntvpt.h)

将打印票证转换为 DEVMODE 结构。

语法

HRESULT PTConvertPrintTicketToDevMode(
  [in]  HPTPROVIDER         hProvider,
  [in]  IStream             *pPrintTicket,
        EDefaultDevmodeType baseDevmodeType,
  [in]  EPrintTicketScope   scope,
  [out] ULONG               *pcbDevmode,
  [out] PDEVMODE            *ppDevmode,
  [out] BSTR                *pbstrErrorMessage
);

参数

[in] hProvider

打开的打印票证提供程序的句柄。 此句柄由 PTOpenProviderPTOpenProviderEx 函数返回。

[in] pPrintTicket

指向 IStream 的指针,其查找位置位于打印票证的开头。

baseDevmodeType

一个值,该值指示在 pPrintTicket 未指定 DEVMODE 的每个可能设置时,是使用用户的默认 DEVMODE 还是打印队列的默认 DEVMODE 向输出 DEVMODE 提供值。

[in] scope

一个值,该值指定 pPrintTicket 的范围。 此值可以指定打印作业中的单个页面、整个文档或所有文档。 pPrintTicket 中超出指定范围的设置将被忽略。 请参阅“备注”。

[out] pcbDevmode

指向 DEVMODE 大小(以字节为单位)的指针。

[out] ppDevmode

指向新创建的 DEVMODE 的指针。

[out] pbstrErrorMessage

指向字符串的指针,该字符串指定 pPrintTicket 无效的内容(如果有)。 如果有效,则为 NULL

返回值

如果操作成功,则返回值S_OK。

如果 hProvider 在不同的线程中打开,则 E_INVALIDARG HRESULT

如果 pPrintTicket 无效,则 E_PRINTTICKET_FORMAT HRESULT

否则, HRESULT 中会返回一些其他错误代码。 有关 COM 错误代码的详细信息,请参阅错误处理

注解

注意 这是一个阻塞或同步函数,可能不会立即返回。 此函数返回的速度取决于运行时因素(例如网络状态、打印服务器配置和打印机驱动程序实现),这些因素在编写应用程序时难以预测。 从管理与用户界面交互的线程调用此函数可能会使应用程序看起来无响应。
 
hProvider 参数必须是在用于此函数的线程所在的线程中打开的句柄。

如果 baseDevmodeType 为 kUserDefaultDevmode,但用户的默认值不可用,则将使用设备的默认值。

返回的 DEVMODE 可能在内部不一致或与硬打印机设置冲突,即使其中的每个设置单独可行。 例如,如果打印机支持可选的双工器,但 pPrintTicket 调用双工,则返回的 DEVMODE 也将调用双工,即使未安装双工器。 使用 DocumentProperties 更正返回的 DEVMODE

应使用 PTReleaseMemory 释放返回的 ppDevmode 中的缓冲区。

忽略范围之外的 pPrintTicket 的值。 例如,如果范围只有一页,则忽略作业范围的设置和文档范围的设置。 作业范围包括文档范围和页面范围。 文档范围包括页面范围。

如果 pbstrErrorMessage 在函数返回时不 为 NULL ,则调用方必须使用 SysFreeString 释放字符串。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 prntvpt.h
Library Prntvpt.lib
DLL Prntvpt.dll

另请参阅

打印架构

打印后台处理程序 API 函数

打印