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 協助 Unidrv 驅動程式根據 IPrintOemUni::ImageProcessing 方法的記憶體需求,判斷 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 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 (包含 Prcomoem.h)

另請參閱

DEVOBJ

IPrintOemUni

IPrintOemUni::ImageProcessing

OEMMEMORYUSAGE