Condividi tramite


Callback di notifica

Qualsiasi componente di stampa o applicazione in ascolto che è 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 spooler possano implementare un oggetto COM o C++.

Un'applicazione in ascolto deve fornire un puntatore a un'interfaccia IPrintAsyncNotifyCallback quando registra per ricevere notifiche. Il mittente di 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 viene inviata una notifica da una parte 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 una sola fine, il servizio spooler chiama il metodo IPrintAsyncNotifyCallback::ChannelClosed all'altra fine per annunciare che il canale è chiuso. Il motivo per la chiusura del canale viene recapitato come notifica.

Se il server o l'applicazione in ascolto muore, il codice di esecuzione del spooler rileva questa condizione e la fine "ancora attiva" del canale che è ancora attiva viene notificata da una chiamata IPrintAsyncNotifyCallback::ChannelClosed , in cui viene recapitato un messaggio di NOTIFICATION_RELEASE.