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 方法必須配置的永久配置固定大小的記憶體數量。
此值會在 dwFixedMemoryUsageOEMMEMORYUSAGE 結構的成員中傳回。
-
IPrintOemUni::ImageProcessing 方法完成處理之後,保留點陣圖所需的記憶體數量。
轉譯外掛程式會將這個已處理的點陣圖傳回 Unidrv,或將其多任務緩衝處理。 儲存已處理之位圖所需的記憶體數量會傳回 dwPercentMemoryUsage OEMMEMORYUSAGE 結構的成員,並以來源位圖大小的百分比表示。
dwMaxBandSize OEMMEMORYUSAGE 結構的成員是由 Unidrv 提供,並指定預設的帶狀大小上限。
在 Unidrv 驅動程式建立繪圖介面之前,它會要求 GDI 根據可用的系統記憶體來判斷影像帶狀位圖的最佳大小。 對於每個帶狀位圖,每個帶狀位圖之間都必須共用這個最佳記憶體空間,該位圖會傳遞至 IPrintOemUni::ImageProcessing 方法,以及方法傳回或輸出的處理位圖。。 Unidrv 會呼叫轉譯外掛程式的 IPrintOemUni::MemoryUsage
方法,如果存在,則會使用結果來計算最佳記憶體空間的分割方式。
例如, 假設 GDI 報告,用於繪製的最佳記憶體數量為 6 MB(包含在 OEMMEMORYUSAGE 結構的 dwMaxBandSize 成員中),而轉譯外掛程式的 IPrintOemUni::MemoryUsage
方法會針對 dwFixedMemoryUsage 傳回零的值,而 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) |