通知資料物件
通知資料會當做公開 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::Release 方法之前呼叫 IPrintAsyncNotifyDataObject::ReleaseData方法,就不會釋放物件。 建議呼叫 IPrintAsyncNotifyDataObject::AcquireData 方法應該遞增物件的參考計數,而且 對 ReleaseData 方法的呼叫應該遞減物件的參考計數。
多工緩衝處理常式會定義名為 NOTIFICATION_RELEASE 的特殊通知類型 GUID。 當多工緩衝處理器或接聽應用程式終止時,取消程式碼會藉由呼叫 IPrintAsyncNotifyChannel::CloseChannel 方法宣告通道的「仍在運作中」結束。
針對此通知對 IPrintAsyncNotifyDataObject::AcquireData 方法的呼叫會傳回 BYTE** 參數設為 Null、ULONG* 參數設定為 0,並將 GUID* 參數設定為 NOTIFICATION_RELEASE。