次の方法で共有


通知コールバック

通知の受信に関心のある印刷コンポーネントまたはリッスンしているアプリケーションは、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 呼び出しによって通知されます。