通知コールバック
通知の受信に関心のある印刷コンポーネントまたはリッスンしているアプリケーションは、IPrintAsyncNotifyCallback インターフェイスを公開するオブジェクトを提供する必要があります。 インターフェイスは、スプーラー通知メカニズムのクライアントが COM または C++ オブジェクトを実装できるように、IUnknown から継承します。
リッスンしているアプリケーションは、通知を受信するために登録するときに、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 メソッドを呼び出して、チャネルが閉じられたことを通知します。 チャネルを閉じる理由は通知として配信されます。
サーバーまたはリッスンしているアプリケーションのいずれかが終了した場合、スプーラー ランダウン コードはこの状態を検出し、まだ有効なチャネルの "まだ有効な" エンドは、NOTIFICATION_RELEASE メッセージが配信される IPrintAsyncNotifyCallback::ChannelClosed 呼び出しによって通知されます。