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 兆字节。

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

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

要求

   
目标平台 桌面
Header prcomoem.h (包括 Prcomoem.h)

请参阅

DEVOBJ

IPrintOemUni

IPrintOemUni::ImageProcessing

OEMMEMORYUSAGE