通知回调

任何有兴趣接收通知的打印组件或侦听应用程序都必须提供公开 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消息)将通知仍处于活动状态的通道的“仍然处于活动状态”端。