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 成员中返回的值还应包括依赖于源位图大小的任何其他内存分配量。

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

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

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

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

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

要求

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

另请参阅

DEVOBJ

IPrintOemUni

IPrintOemUni::ImageProcessing

OEMMEMORYUSAGE