Condividi tramite


Callback delle notifiche

Qualsiasi componente di stampa o applicazione in ascolto interessato alla ricezione di notifiche deve fornire oggetti che espongono l'interfaccia IPrintAsyncNotifyCallback . L'interfaccia eredita da IUnknown in modo che i client del meccanismo di notifica dello spooler possano implementare un oggetto COM o C++.

Un'applicazione in ascolto deve fornire un puntatore a un'interfaccia IPrintAsyncNotifyCallback quando esegue la registrazione per ricevere notifiche. Il mittente della notifica deve fornire un puntatore a un'interfaccia IPrintAsyncNotifyCallback se è interessato a una risposta e crea un canale bidirezionale.

#define INTERFACE IPrintAsyncNotifyCallback
DECLARE_INTERFACE_(IPrintAsyncNotifyCallback, IUnknown)
{
    STDMETHOD(QueryInterface)(
        THIS_
        REFIID riid,
        void** ppvObj
        ) PURE;

    STDMETHOD_(ULONG, AddRef)(
        THIS
        ) PURE;

    STDMETHOD_(ULONG, Release)(
        THIS
        ) PURE;

    STDMETHOD(OnEventNotify)(
         THIS_
 IN IPrintAsyncNotifyChannel*,
         IN IPrintAsyncNotifyDataObject*
         ) PURE;

 STDMETHOD(ChannelClosed)(
         THIS_
         IN IPrintAsyncNotifyChannel*,
         IN IPrintAsyncNotifyDataObject*
         ) PURE;
};

Quando una notifica viene inviata da un lato del canale, il servizio spooler chiama il metodo IPrintAsyncNotifyCallback::OnEventNotify all'altra estremità del canale per recapitare la notifica.

Quando il canale di notifica viene chiuso a un'estremità, il servizio spooler chiama il metodo IPrintAsyncNotifyCallback::ChannelClosed all'altra estremità per annunciare che il canale è chiuso. Il motivo della chiusura del canale viene recapitato come notifica.

Se il server o l'applicazione in ascolto smette di funzionare, il codice di rundown dello spooler rileva questa condizione e notifica la parte del canale che è ancora funzionante tramite una chiamata IPrintAsyncNotifyCallback::ChannelClosed, in cui viene recapitato un messaggio NOTIFICATION_RELEASE.