任何有興趣接收通知的列印元件或接聽應用程式都必須提供公開 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訊息。