Partager via


Plug-in de rendu non basés sur COM

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Un minipilote d’imprimante notifie le pilote principal de ses capacités en implémentant la fonction OEMEnableDriver, qui remplit les membres d’une structure DRVENABLEDATA. Le membre pdrvfn de cette structure doit être défini avec l’adresse du tableau des structures DRVFN. Chaque élément de ce tableau doit respectivement être initialisé avec un index de fonction, ainsi que l’adresse de l’une des fonctions OEMXxx que le fournisseur de matériel indépendant (IHV) implémente. (Pour des descriptions détaillées de chacune des fonctions OEMXxx, veuillez consulter Fonctions d’accrochage DDI non basées sur COM).

Lorsqu’une application appelle Microsoft Win32 GDI pour effectuer une tâche de rendu, Win32 GDI appelle à son tour le pilote principal Unidrv ou Pscript5, qui gère généralement la tâche. Cependant, si un minipilote d’imprimante a indiqué qu’il est capable d’accrocher une opération de rendu spécifique, le pilote principal passe la tâche de rendu au plug-in de rendu de l’IHV.

Par exemple, considérons une application qui appelle l’API Win32 LineTo (décrite dans la documentation du SDK Windows). En général, cela entraînerait un autre appel à la fonction DDI DrvLineTo du pilote principal pour tracer la ligne. Si le minipilote d’imprimante a indiqué qu’il a l’intention d’accrocher les appels à cette DDI, cependant, DrvLineTo transfère immédiatement l’appel à la fonction OEMLineTo de l’IHV.

Un IHV peut implémenter OEMLineTo, ou toute autre fonction d’accrochage décrite dans Fonctions d’accrochage DDI non basées sur COM, afin de pouvoir gérer complètement l’opération de rendu, ou il peut rappeler pour que le pilote principal gère cette opération.

OEMLineTo pourrait être implémentée comme illustré dans l’exemple de pseudocode suivant :

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,));
}

Dans l’exemple précédent, l’expression

poempdev->pfnUnidrv[UD_DrvLineTo]

évalue à l’adresse de la fonction DDI DrvLineTo du pilote principal. L’expression (PFN_DrvLineTo) qui la précède convertit le pointeur de fonction au type approprié. Chacune des fonctions d’accrochage listées dans cette section est associée à son propre pointeur de fonction.

Notez que lorsqu’une fonction DDI OEMXxx rappelle le pilote principal Unidrv et que la surface impliquée est une surface gérée par le périphérique, Unidrv peut simplement ignorer l’appel en renvoyant FALSE.