Поделиться через


Обратный вызов уведомления

Любой компонент печати или прослушивающее приложение, которое заинтересовано в получении уведомлений, должны предоставлять объекты, предоставляющие интерфейс IPrintAsyncNotifyCallback . Интерфейс наследуется от IUnknown , чтобы клиенты механизма уведомлений очереди очереди могли реализовать объект COM или C++.

Прослушивающее приложение должно предоставлять указатель на интерфейс IPrintAsyncNotifyCallback при регистрации для получения уведомлений. Отправитель уведомления должен предоставить указатель на интерфейс IPrintAsyncNotifyCallback , если он заинтересован в ответе и создает двунаправленный канал.

#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;
};

Когда уведомление отправляется с одного конца канала, служба очереди очереди очереди вызывает метод IPrintAsyncNotifyCallback::OnEventNotify на другом конце канала для доставки уведомления.

Когда канал уведомлений закрыт на одном конце, служба очереди вызывает метод IPrintAsyncNotifyCallback::ChannelClosed на другом конце, чтобы объявить о закрытии канала. Причина закрытия канала доставляется в виде уведомления.

Если сервер или прослушивающее приложение умирает, код запуска очереди очереди обнаруживает это условие, а конец все еще активного канала уведомляется вызовом IPrintAsyncNotifyCallback::ChannelClosed , в котором доставляется сообщение NOTIFICATION_RELEASE.