IPrintOemPS::EnableDriver 方法 (prcomoem.h)

IPrintOemPS::EnableDriver 方法允许 Pscript 的呈现插件挂接某些图形 DDI 函数。

语法

HRESULT EnableDriver(
  DWORD          DriverVersion,
  DWORD          cbSize,
  PDRVENABLEDATA pded
);

参数

DriverVersion

调用方提供的接口版本号。 此值由 printoem.h 中的 PRINTER_OEMINTF_VERSION 定义。

cbSize

由 pded 指向的结构的调用方提供的大小(以字节为单位)。

pded

调用方提供的指向 DRVENABLEDATA 结构的指针。

返回值

方法必须返回以下值之一:

返回代码 说明
S_OK 操作成功。
E_FAIL 操作失败
E_NOTIMPL 该方法未实现。

注解

IPrintOemPS::EnableDriver 方法允许呈现插件执行与由打印机图形 DLL 导出的 DrvEnableDriver 函数相同的操作类型。

DrvEnableDriver 函数一样, IPrintOemPS::EnableDriver 方法负责提供内部支持的图形 DDI 函数(称为挂钩函数)的地址。 它还可以执行其他一次性初始化操作。 与 DrvEnableDriver 函数不同, IPrintOemPS::EnableDriver 方法的实现是可选的。

如果实现 IPrintOemPS::EnableDriver,还必须实现 IPrintOemPS::D isableDriver。 在前一个方法中开始的操作可能需要在后一个方法中完成。 例如,如果在 IPrintOemPS::EnableDriver 中分配了较大的缓冲区,但在 IPrintOemPS::D isableDriver 中未解除分配,则可能会出现内存泄漏。

方法应填充提供的 DRVENABLEDATA 结构并分配 DRVFN 结构的数组。 它应使用指向挂钩函数的指针以及用于标识挂钩图形 DDI 函数的 winddi.h 定义的索引值填充数组。

仅当 Pscript5 驱动程序定义函数时,Pscript5 的呈现插件才能挂出图形 DDI 函数。 下图 DDI 函数在 Pscript5 和 或 Unidrv 中定义,因此可以挂出:

如果提供自定义挂钩函数,它会抢占驱动程序的等效图形 DDI 函数。 挂钩函数还可以调用回驱动程序的图形 DDI 函数。 有关详细信息,请参阅 自定义图形 DDI 函数

自定义挂钩函数具有与等效图形 DDI 函数相同的输入和输出参数,但有一个例外 - 其中图形 DDI 函数接收 PDEV 指针,自定义挂钩函数接收 DEVOBJ 指针。 这些函数可通过两种方式接收 PDEV 指针:

  1. 作为目标图面的 SURFOBJ 结构的 dhpdev 成员的内容。 对于等效的自定义挂钩函数,目标 SURFOBJ 结构的 dhpdev 成员指向 DEVOBJ 结构,并且必须在引用时转换为 PDEVOBJ 类型。 一个示例图形 DDI 函数是 DrvBitBlt

  2. 作为 dhpdev 参数的输入参数。 当引用 PDEVOBJ 时,等效的自定义挂钩函数必须将此输入参数强制转换为类型 PDEVOBJ。 一个示例图形 DDI 函数是 DrvDitherColor

虽然 打印机图形 DLL 在 DRVENABLEDATA 结构中包含其 DrvEnablePDEVDrvDisablePDEVDrvResetPDEV 函数的地址,但 Pscript5 的呈现插件实现 EnablePDEVDisablePDEVResetPDEV 作为 IPrintOemPS 接口的方法,并且不会将其地址放在 DRVENABLEDATA 结构中。

如果 IPrintOemPS::EnableDriver 方法由多个呈现插件导出,则按照为安装指定插件的顺序调用这些方法。

每个图形 DDI 函数都可以由一个呈现插件挂钩。 如果多个插件尝试挂接相同的图形 DDI 函数,则忽略第一个插件之后的所有挂钩。

有关创建和安装呈现插件的详细信息,请参阅 自定义 Microsoft 的打印机驱动程序

要求

要求
目标平台 桌面
标头 prcomoem.h (包括 Prcomoem.h)