共用方式為


非 COM 型轉譯外掛程式

重要

新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。

如需詳細資訊,請參閱 新式列印平臺列印支援應用程式設計指南

印表機迷你驅動程式會實作 OEMEnableDriver 函式,以通知其功能的核心驅動程式,其會填入DRVENABLEDATA結構的成員 這個結構的 pdrvfn 成員應該使用DRVFN結構的數位地址來設定。 此陣列的每個元素都應該使用函式索引初始化,以及 IHV 所實作之 其中一個 OEMXxx 函式的位址。 (如需每個 的詳細描述OEMXxx 函式,請參閱 非 COM 型 DDI 攔截輸出函式。)

當應用程式呼叫 Microsoft Win32 GDI 來執行轉譯工作時,Win32 GDI 會接著呼叫 Unidrv 或 Pscript5 核心驅動程式,而後者通常會處理工作。 不過,如果印表機迷你驅動程式指出它能夠攔截特定的轉譯作業,核心驅動程式會將轉譯工作傳遞至 IHV 轉譯外掛程式。

例如,請考慮呼叫 Win32 LineTo API 的應用程式(如 Windows SDK 檔中所述)。 一般而言,這會導致再次呼叫核心驅動程式的 DrvLineTo DDI來繪製線條。 不過,如果印表機 minidriver 表示其打算掛接此 DDI 的呼叫,DrvLineTo 會立即將呼叫轉送至 IHV 的 OEMLineTo 函式。

IHV 可以實作 OEMLineTo,或非 COM 型 DDI Hook-Out 函式中所述的任何其他攔截函式,讓它可以完全處理轉譯作業,也可以回呼讓核心驅動程式處理該作業。

OEMLineTo 可以實作,如下列虛擬程式碼範例所示:

BOOL APIENTRY
  OEMLineTo(
    SURFOBJ  *pso,
    CLIPOBJ  *pco,
    BRUSHOBJ  *pbo,
    LONG  x1,
    LONG  y1,
    LONG  x2,
    LONG  y2,
    RECTL  *prclBounds,
    MIX  mix
)
{
if ( OEM intends to handle the call ) {
 code to handle the call
}
else
// OEM calls Unidrv's DrvLineTo DDI
  bRetVal = (((PFN_DrvLineTo)(poempdev->pfnUnidrv[UD_DrvLineTo])) (
 pso,
            pco,
            pbo,
            x1,
            x2,
 y1,
            y2,
            prclBounds,
            mix,));
}

在上述範例中,表達式

poempdev->pfnUnidrv[UD_DrvLineTo]

評估為核心驅動程式 DrvLineTo DDI的位址。 前面將函式指標轉換成適當類型的 (PFN_DrvLineTo) 表達式。 本節所列的每個勾點函式都會與其自己的函式指標相關聯。

請注意,當 OEMXxx DDI 回呼 Unidrv 核心驅動程式,且涉及的表面是裝置管理的介面時,Unidrv 只需傳回 FALSE 即可忽略呼叫。