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 方法需要分配的永久分配固定大小的内存量。
此值在 OEMMEMORYUSAGE 结构的 dwFixedMemoryUsage 成员中返回。
-
IPrintOemUni::ImageProcessing 方法完成处理之后保存位图所需的内存量。
呈现插件要么将此处理的位图返回到 Unidrv,要么将其后台处理。 存储已处理的位图所需的内存量在 OEMMEMORYUSAGE 结构的 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) |