IPrintOemUni::MemoryUsage 方法 (prcomoem.h)
方法 IPrintOemUni::MemoryUsage
可与 Unidrv 支持的打印机一起使用,以指定呈现插件的 IPrintOemUni::ImageProcessing 方法使用所需的内存量。
语法
HRESULT MemoryUsage(
PDEVOBJ pdevobj,
POEMMEMORYUSAGE pMemoryUsage
);
参数
pdevobj
调用方提供的指向 DEVOBJ 结构的指针。
pMemoryUsage
调用方提供的指向 OEMMEMORYUSAGE 结构的指针。
返回值
方法必须返回以下值之一。
返回代码 | 说明 |
---|---|
|
操作成功。 |
|
此操作失败。 |
|
该方法未实现。 |
注解
该方法 IPrintOemUni::MemoryUsage
的目的是根据 IPrintOemUni::ImageProcessing 方法的内存要求,帮助 Unidrv 驱动程序确定 GDI 绘图图面的最佳大小。 方法的 IPrintOemUni::MemoryUsage
实现是可选的。
方法 IPrintOemUni::MemoryUsage
应返回两个值,如下所示:
- IPrintOemUni::ImageProcessing 方法需要分配的永久分配的固定大小的内存量。
-
IPrintOemUni::ImageProcessing 方法处理完位图后保存位图所需的内存量。
呈现插件将处理过的位图返回到 Unidrv,或将其假脱机。 存储已处理位图所需的内存量在 OEMMEMORYUSAGE 结构的 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) |