通知資料會被處理為一個公開 IPrintAsyncNotifyDataObject 介面的物件。 多任務緩衝處理程式通知管道的用戶端可以定義自己的資料結構描述,並可以來回傳送任何資料類型。 不過,多任務緩衝處理程式會查詢通知資料物件的 BYTE* 指標、資料長度和通知類型。 通知類型是 GUID,如 通知類型中所述。
#define INTERFACE IPrintAsyncNotifyDataObject
DECLARE_INTERFACE_(IPrintAsyncNotifyDataObject, IUnknown)
{
STDMETHOD(QueryInterface)(
THIS_
REFIID riid,
void** ppvObj
) PURE;
STDMETHOD_(ULONG, AddRef)(
THIS
) PURE;
STDMETHOD_(ULONG, Release)(
THIS
) PURE;
STDMETHOD(AcquireData)(
THIS_
OUT BYTE**,
OUT ULONG*,
OUT PrintAsyncNotificationType**
) PURE;
STDMETHOD(ReleaseData)(
THIS
) PURE;
};
通知寄件者必須將資料封裝在 IPrintAsyncNotifyDataObject 物件中。 傳送者必須實作 IUnknown 介面。
接聽用戶端會呼叫 IPrintAsyncNotifyDataObject::AcquireData 方法,以取得通知資料的原始指標、通知資料的大小,以及通知類型。
當接聽用戶端完成資料時,它必須呼叫 IPrintAsyncNotifyDataObject::ReleaseData 方法。 多任務緩衝處理程式通知管道的用戶端必須實作 IPrintAsyncNotifyDataObject 介面,如果在呼叫 IPrintAsyncNotifyDataObject::ReleaseData 方法之前呼叫 IPrintAsyncNotifyDataObject::Release 方法,則不會釋放物件。 建議呼叫 IPrintAsyncNotifyDataObject::AcquireData 方法應該遞增物件的參考計數,而呼叫 ReleaseData 方法應該遞減物件的參考計數。
多任務緩衝處理程式會定義名為 NOTIFICATION_RELEASE 的特殊通知類型 GUID。 當排程器或接聽應用程式終止時,結束程式碼會通過呼叫 IPrintAsyncNotifyChannel::CloseChannel 方法,宣告通道「雖然已結束,但仍維持持續狀態」。
針對此通知呼叫 IPrintAsyncNotifyDataObject::AcquireData 方法,會傳回結果:將 BYTE** 參數設定為 NULL,將 ULONG* 參數設定為 0,並將 GUID* 參數設定為 NOTIFICATION_RELEASE。