IPrintOemPrintTicketProvider::BindPrinter 方法 (prcomoem.h)

IPrintOemPrintTicketProvider::BindPrinter 方法使核心驱动程序能够将一组专用命名空间统一资源标识符(URI)与设备相关联。 此方法还允许插件缓存稍后可以使用的信息(如打印机句柄)。

语法

HRESULT BindPrinter(
  [in]  HANDLE     hPrinter,
  [in]  INT        version,
  [out] POEMPTOPTS pOptions,
  [out] INT        *cNamespaces,
  [out] BSTR       **ppNamespaces
);

参数

[in] hPrinter

后台处理程序的打印句柄,由 Unidrv 提供。 提供程序不应随时关闭此句柄,因为提供程序的客户端负责管理此句柄的生存期。 提供程序可以缓存打印句柄;此对象的所有将来调用都相对于与此句柄关联的打印机。

[in] version

打印架构的主要版本号。 Windows Vista 仅支持版本 1。

[out] pOptions

指向接收以下枚举值的变量的指针:

OEMPT_DEFAULT

系统将专用 DEVMODEW 的二进制大型对象 [BLOB] 二进制编码(BLOB])置于打印票证中,将 DEVMOD EW 转换为打印票证。

OEMPT_NOSNAPSHOT

系统不会将专用 DEVMODEW 结构的二进制编码(BLOB)放入打印票证,以将 DEVMODEW 转换为打印票证。 如果打印票证中完全表示所有公共和私有 DEVMODEW 成员,请使用此值。

要调用的 OEM 对象应设置此参数指向的值。

[out] cNamespaces

指向接收插件中使用的专用命名空间 URI 数的变量的指针。 此数字表示由 *ppNamespaces指向的数组中的字符串计数。

[out] ppNamespaces

指向接收 BSTR 数组第一个元素地址的变量的指针。 插件使用命名空间 URI 填充每个数组位置。 有关此参数的详细信息,请参阅以下“备注”部分。

返回值

IPrintOemPrintTicketProvider::BindPrinter 应返回以下值之一。

返回代码 描述
S_OK 作成功。
E_VERSION_NOT_SUPPORTED 插件不支持在 版本 参数中指定的打印架构的版本。

言论

插件负责为 ppNamespaces 参数和命名空间 URI 字符串指向的数组分配内存。 应使用 CoTaskMemAlloc 函数分配数组;应使用 SysAllocString 函数分配命名空间字符串。 Microsoft Windows SDK 文档中介绍了这两个函数。 ppNamespaces 参数指向的数组不需要包含打印架构关键字或打印架构框架的命名空间。

绑定到设备后,提供程序可以缓存某些对象,并处理将来在该设备上打印票证或打印功能服务所需的对象。 例如,可以缓存 hPrinter 中的打印机句柄。 IPrintOemPrintTicketProvider::BindPrinter 保证只调用一次。

IPrintOemPrintTicketProvider 对象不必多次绑定。 打印票证管理器始终使用不同的 IPrintOemPrintTicketProvider 对象实例来绑定到不同的设备。 当 IPrintOemPrintTicketProvider 对象的引用计数为零时,应释放成功调用 IPrintOemPrintTicketProvider::BindPrinter 获取的所有资源。 (请注意,提供程序不应关闭传递给 BindPrinter调用的句柄)。 如果支持多个版本,打印票证管理器可能会在不同版本中为同一设备创建多个提供程序。

要求

要求 价值
目标平台 桌面
标头 prcomoem.h (include Prcomoem.h)

另请参阅

IPrintOemPrintTicketProvider

IPrintOemPrintTicketProvider::ConvertDevModeToPrintTicket

IPrintOemPrintTicketProvider::ConvertPrintTicketToDevMode

IPrintOemPrintTicketProvider::GetSupportedVersions