Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Guia de design do aplicativo de suporte de impressão v1 e v2.
Todos os plug-ins de driver de impressora devem definir as funções DllMain, DllGetClassObject e DllCanUnloadNow. Eles também devem implementar a interface IClassFactory COM e uma das interfaces COM: IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPSou IPrintOemPS2.
Ao criar um plug-in de interface do usuário ou um plug-in de renderização , deve basear o seu código no plug-in de interface do usuário de exemplo ou nos plug-ins de renderização de exemplo fornecidos no WDK.
Para criar qualquer tipo de plug-in, você deve fazer o seguinte:
Defina uma função DllMain (descrita na documentação do SDK do Windows).
Este é o ponto de entrada para todas as DLLs do Win32.
Defina e exporte uma função DllGetClassObject (descrita na documentação do SDK do Windows).
O driver de impressora chama essa função para obter acesso à implementação do plug-in da interface IClassFactory (descrita na documentação do SDK do Windows). Quando o driver chama DllGetClassObject, ele especifica um dos seguintes identificadores de classe (definidos em prcomoem.h):
CLSID_OEMUI - para plug-ins de interface de utilizador
CLSID_OEMRENDER - para renderizar plug-ins
O driver também especifica um identificador de interface de IID_IClassFactory.
A função DllGetClassObject deve criar uma instância de sua interface IClassFactory e retornar um ponteiro para ele, conforme ilustrado no código de exemplo.
Implemente a interface IClassFactory COM.
O método CreateInstance da interface IClassFactory deve criar uma instância da implementação do plug-in de uma das seguintes interfaces COM:
IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPSou IPrintOemPS2
Uma das entradas do método CreateInstance é um identificador de interface. O driver chama CreateInstance com um identificador de interface de IID_IUnknown, o que significa que o método CreateInstance deve retornar um ponteiro para a interface IUnknown da instância criada (descrita na documentação do SDK do Windows), conforme ilustrado no código de exemplo.
Implemente uma das interfaces COM IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS ou IPrintOemPS2, incluindo a interface IUnknown padrão, conforme ilustrado no código de exemplo.
O primeiro dos métodos implementados a ser chamado pelo driver é o método QueryInterface da interface IUnknown (descrito na documentação do SDK do Windows). Este método recebe um dos identificadores de interface para drivers de impressora como um argumento de entrada. O driver chama o método para determinar qual versão da interface é suportada pelo plug-in e para receber um ponteiro para a interface suportada.
Defina e exporte uma função DllCanUnloadNow (descrita na documentação do SDK do Windows).
A função DllCanUnloadNow deve retornar S_OK se todas as instâncias das interfaces COM IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemPS ou IPrintOemPS2 implementadas pelo plug-in tiverem sido lançadas. O retorno de S_OK indica ao driver que o plug-in pode ser descarregado da memória.
Observe que quando o driver de impressora descarrega a DLL do plug-in, ele primeiro chama a função DllCanUnloadNow do plug-in. Independentemente do valor retornado por DllCanUnloadNow, o driver de impressora descarrega a DLL do plug-in chamando a função FreeLibrary. Isso é feito para garantir que a DLL do plug-in seja descarregada antes que o driver seja descarregado.
Se a DLL do plug-in deve permanecer carregada (por exemplo, quando cria um thread que usa a DLL do plug-in), o thread deve carregar a DLL, usando uma chamada para a função LoadLibrary. Quando o thread terminar com a DLL, ele deve chamar a função FreeLibraryAndExitThread para descarregá-lo. Numa situação em que uma linha de execução chamou LoadLibrary, a chamada do driver para FreeLibrary apenas diminui o contador de referências da DLL, impedindo assim o seu descarregamento. As funções LoadLibrary, FreeLibrary e FreeLibraryAndExitThread são descritas na documentação do SDK do Windows.