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