IPrintOemUni::MemoryUsage 方法 (prcomoem.h)

方法 IPrintOemUni::MemoryUsage 可与 Unidrv 支持的打印机一起使用,以指定呈现插件的 IPrintOemUni::ImageProcessing 方法使用所需的内存量。

语法

HRESULT MemoryUsage(
  PDEVOBJ         pdevobj,
  POEMMEMORYUSAGE pMemoryUsage
);

参数

pdevobj

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

pMemoryUsage

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

返回值

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

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

注解

该方法 IPrintOemUni::MemoryUsage 的目的是根据 IPrintOemUni::ImageProcessing 方法的内存要求,帮助 Unidrv 驱动程序确定 GDI 绘图图面的最佳大小。 方法的 IPrintOemUni::MemoryUsage 实现是可选的。

方法 IPrintOemUni::MemoryUsage 应返回两个值,如下所示:

  • IPrintOemUni::ImageProcessing 方法需要分配的永久分配的固定大小的内存量。

    此值在 OEMMEMORYUSAGE 结构的 dwFixedMemoryUsage 成员中返回。

  • IPrintOemUni::ImageProcessing 方法处理完位图后保存位图所需的内存量。

    呈现插件将处理过的位图返回到 Unidrv,或将其假脱机。 存储已处理位图所需的内存量在 OEMMEMORYUSAGE 结构的 dwPercentMemoryUsage 成员中返回,以源位图大小的百分比表示。

dwPercentMemoryUsage 成员中返回的值除了处理位图的大小外,还应包括依赖于源位图大小的任何其他内存分配量。

OEMMEMORYUSAGE 结构的 dwMaxBandSize 成员由 Unidrv 提供,并指定默认的最大带区大小。

在 Unidrv 驱动程序创建绘图图面之前,它会请求 GDI 根据可用的系统内存确定图像镶边位图的最佳大小。 对于每个带状位图,必须在传递给 IPrintOemUni::ImageProcessing 方法的源位图和 (通常较小的) 处理位图(该方法返回或输出)之间共享此最佳内存空间。 Unidrv 调用呈现插件的 IPrintOemUni::MemoryUsage 方法(如果存在),并使用结果计算如何最好地划分最佳内存空间。

例如,假设 GDI 报告用于绘制的最佳内存量为 6 兆字节 (包含在 OEMMEMORYUSAGE 结构的 dwMaxBandSize 成员) ,而呈现插件的 IPrintOemUni::MemoryUsage 方法为 dwFixedMemoryUsage 返回值 0,对于 dwPercentMemoryUsage 返回值 50。 值 50 表示 IPrintOemUni::ImageProcessing 方法的输出位图将比源位图小 50%。 因此,Unidrv 将分配 4 兆字节的源位图大小,从而导致输出位图为 2 MB。

IPrintOemUni::MemoryUsage如果未提供方法,Unidrv 会将所有最佳可用空间分配给源位图。 如果 IPrintOemUni::ImageProcessing 方法在为源位图分配的内存空间中返回已处理的位图,则这是可接受的。 但是,如果呈现插件的 IPrintOemUni::ImageProcessing 方法确实为目标位图分配了空间,但没有提供 IPrintOemUni::MemoryUsage 方法,则结果是为位图分配的内存将多于最佳可用大小,这可能会导致性能下降。

方法是 IPrintOemUni::MemoryUsage 可选的。 如果呈现插件实现此方法,则插件的 IPrintOemUni::GetImplementedMethod 方法在接收“MemoryUsage”作为输入时必须返回S_OK。

要求

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

另请参阅

DEVOBJ

IPrintOemUni

IPrintOemUni::ImageProcessing

OEMMEMORYUSAGE