Обратный вызов уведомления
Любой компонент печати или прослушивающее приложение, которое заинтересовано в получении уведомлений, должны предоставлять объекты, предоставляющие интерфейс 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.