De Plug-In maken
Belangrijk
Het moderne afdrukplatform is de voorkeursmiddel van Windows om te communiceren met printers. U wordt aangeraden het IPP-inboxklassestuurprogramma van Microsoft te gebruiken, samen met Print Support Apps (PSA), om de afdrukervaring in Windows 10 en 11 aan te passen voor de ontwikkeling van printerapparaten.
Zie de ontwerpgids voor printondersteuningsappsvoor meer informatie.
Alle invoegtoepassingen voor printerstuurprogramma's moeten de functies DllMain, DllGetClassObject en DllCanUnloadNow definiëren. Ze moeten ook de IClassFactory COM-interface en een van de IPrintOemUI-, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPSof IPrintOemPS2 COM-interfaces.
Wanneer u een invoegtoepassing voor de gebruikersinterface maakt of een rendering-invoegtoepassing, moet u uw code baseren op de voorbeeld-UI-invoegtoepassing of op de voorbeeldweergaveinvoegtoepassingen geleverd in de WDK.
Als u een van beide typen invoegtoepassingen wilt maken, moet u het volgende doen:
Definieer een DllMain-functie (beschreven in de Windows SDK-documentatie).
Dit is het toegangspunt voor alle Win32-DLL's.
Definieer en exporteer een DllGetClassObject-functie (beschreven in de Windows SDK-documentatie).
Het printerstuurprogramma roept deze functie aan om toegang te krijgen tot de implementatie van de IClassFactory-interface van de invoegtoepassing (beschreven in de Windows SDK-documentatie). Wanneer het stuurprogramma DllGetClassObject aanroept, wordt een van de volgende klasse-id's opgegeven (gedefinieerd in prcomoem.h):
CLSID_OEMUI - voor UI-invoegtoepassingen
CLSID_OEMRENDER - voor rendering-invoegtoepassingen
Het stuurprogramma geeft ook een interface-id van IID_IClassFactory.
De functie DllGetClassObject moet een exemplaar van de IClassFactory-interface maken en er een aanwijzer naar retourneren, zoals geïllustreerd in de voorbeeldcode.
Implementeer de IClassFactory COM-interface.
De methode CreateInstance van de IClassFactory-interface moet een exemplaar maken van de implementatie van de invoegtoepassing van een van de volgende COM-interfaces:
IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPSof IPrintOemPS2
Een van de invoeren van de methode CreateInstance is een interface-id. Het stuurprogramma roept CreateInstance aan met een interface-id van IID_IUnknown, wat betekent dat de Methode CreateInstance een aanwijzer moet retourneren naar de IUnknown-interface van het gemaakte exemplaar (beschreven in de Windows SDK-documentatie), zoals geïllustreerd in de voorbeeldcode.
Implementeer een van de IPrintOemUI-, IPrintOemUI2-, IPrintOemUni2-, IPrintOemUni3-, IPrintOemPS- of IPrintOemPS2 COM-interfaces, waaronder de standaard-IUnknown-interface, zoals geïllustreerd in de voorbeeldcode.
De eerste van de geïmplementeerde methoden die door het stuurprogramma moeten worden aangeroepen, is de QueryInterface-methode van de IUnknown-interface (beschreven in de Windows SDK-documentatie). Deze methode ontvangt een van de interface-id's voor printerstuurprogramma's als invoerargument. Het stuurprogramma roept de methode aan om te bepalen welke versie van de interface wordt ondersteund door de invoegtoepassing en om een aanwijzer te ontvangen naar de ondersteunde interface.
Definieer en exporteer een DllCanUnloadNow-functie (beschreven in de Windows SDK-documentatie).
De functie DllCanUnloadNow moet S_OK retourneren als alle exemplaren van de door de invoegtoepassing geïmplementeerde IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS of IPrintOemPS2 COM-interfaces zijn uitgebracht. De S_OK retour geeft aan aan het stuurprogramma dat de invoegtoepassing kan worden uitgeladen.
Houd er rekening mee dat wanneer het printerstuurprogramma de DLL van de invoegtoepassing verwijdert, eerst de dllCanUnloadNow-functie van de invoegtoepassing aanroept. Ongeacht de waarde die door DllCanUnloadNow wordt geretourneerd, laadt het printerstuurprogramma vervolgens de invoegtoepassings-DLL uit door de functie FreeLibrary aan te roepen. Dit wordt gedaan om ervoor te zorgen dat de invoegtoepassings-DLL wordt ontladen voordat het stuurprogramma wordt ontladen.
Als het DLL-bestand van de invoegtoepassing moet worden geladen (bijvoorbeeld wanneer er een thread wordt gemaakt die gebruikmaakt van de invoegtoepassings-DLL), moet de thread het DLL-bestand laden met behulp van een aanroep naar de loadlibrary-functie. Wanneer de thread is voltooid met het DLL-bestand, moet de functie FreeLibraryAndExitThread worden aangeroepen om deze te verwijderen. In een situatie waarin een thread LoadLibrary heeft aangeroepen, zorgt de oproep van de driver naar FreeLibrary er slechts voor dat de referentietelling van het DLL-bestand wordt verminderd, waardoor het niet kan worden ontladen. De functies LoadLibrary, FreeLibrary en FreeLibraryAndExitThread worden beschreven in de Windows SDK-documentatie.