共用方式為


IPrintOemUni::EnableDriver 方法 (prcomoem.h)

IPrintOemUni::EnableDriver 方法可讓轉譯外掛程式 Unidrv 勾出某些圖形 DDI 函式。

語法

HRESULT EnableDriver(
  DWORD          DriverVersion,
  DWORD          cbSize,
  PDRVENABLEDATA pded
);

參數

DriverVersion

呼叫端提供的介面版本號碼。 此值是由 printoem.h 中的 PRINTER_OEMINTF_VERSION 所定義。

cbSize

呼叫端提供的大小,以位元組為單位,由 pded所指向的結構。

pded

DRVENABLEDATA 結構的呼叫端提供的指標。

傳回值

方法必須傳回下列其中一個值。

傳回碼 描述
S_OK 作業成功。
E_FAIL 作業失敗

言論

Unidrv 的轉譯外掛程式必須實作 IPrintOemUni::EnableDriver 方法。

IPrintOemUni::EnableDriver 方法可讓轉譯外掛程式執行與印表機圖形 DLL 導出的 DrvEnableDriver 函式相同的作業類型。

如同 DrvEnableDriver 函式,IPrintOemUni::EnableDriver 方法負責提供內部支援的圖形 DDI 函式地址,稱為勾點函式。 它也可以執行其他一次性初始化作業。 不同於 DrvEnableDriver 函式,IPrintOemUni::EnableDriver 實作是選擇性的。

如果您實作 IPrintOemUni::EnableDriver,您也必須實作 IPrintOemUni::D isableDriver。 先前方法中開始的動作可能需要在後一個方法中完成。 例如,如果在 IPrintOemUni::EnableDriver中配置大型緩衝區,但在 IPrintOemUni::D isableDriver中未解除分配,可能會發生記憶體流失。

方法應該填入提供的 DRVENABLEDATA 結構,並配置 DRVFN 結構的陣列。 它應該使用連結函式的指標填入數位,以及用來識別連結圖形 DDI 函式的winddi.h 定義索引值。

只有在 Unidrv 驅動程式定義函式時,Unidrv 的轉譯外掛程式才能攔截圖形 DDI 函式。 下列圖形 DDI 函式定義於 Unidrv 和/或 Pscript5 中,因此可以連結:

如果您提供自定義的勾點函式,它會先佔驅動程式的對等圖形 DDI 函式。 連結函式也可以回呼至驅動程序的圖形 DDI 函式。 如需詳細資訊,請參閱 自訂圖形 DDI 函式

自定義勾點函式的輸入和輸出參數與對等圖形 DDI 函式相同,但有一個例外- 其中圖形 DDI 函式會接收 PDEV 指標,自定義勾點函式會接收 DEVOBJ 指標。 圖形 DDI 函式有兩種方式可接收 PDEV 指標:

  • 作為目的地介面 SURFOBJ 結構 成員之 dhpdev 的內容。 對於對等的自定義攔截函式,目的地 SURFOBJ 結構的 dhpdev 成員指向 DEVOBJ 結構,而且必須在參考時轉換成類型 PDEVOBJ。 範例圖形 DDI 函式是 DrvBitBlt

  • 作為 dhpdev 參數的輸入自變數。 當參考 PDEVOBJ 時,對等的自定義攔截函式必須將這個輸入參數轉換成類型 PDEVOBJ。 範例圖形 DDI 函式是 DrvDitherColor

請注意,雖然 印表機圖形 DLL 包含其 DrvEnablePDEV的位址、DrvDisablePDEV,以及 drvResetPDEV DRVENABLEDATA 結構中的 drvResetPDEV 函式, 轉譯外掛程式會明確匯出 EnablePDEVDisablePDEV,以及 ResetPDEV 做為 IPrintOemUni 介面的方法,而且不會將其位址放在 DRVENABLEDATA 結構中。

如果 IPrintOemUni::EnableDriver 方法是由多個轉譯外掛程式匯出,則會依外掛程式指定安裝的順序呼叫方法。

每個圖形 DDI 函式只能由一個轉譯外掛程式連結。 如果多個外掛程式嘗試攔截相同的圖形 DDI 函式,則會忽略第一個外掛程式之後的所有攔截。

如需建立及安裝轉譯外掛程式的詳細資訊,請參閱 自定義Microsoft的印表機驅動程式

要求

要求 價值
目標平臺 桌面
標頭 prcomoem.h (include Prcomoem.h)