Объект данных уведомления
Данные уведомления обрабатываются как объект, предоставляющий интерфейс 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 значение счетчика ссылок объекта уменьшалось.
Очередь очереди определяет специальный GUID типа уведомлений с именем NOTIFICATION_RELEASE. Когда очередь очереди или прослушивающее приложение умирают, код запуска объявляет о том, что конец канала все еще активен, вызывая метод IPrintAsyncNotifyChannel::CloseChannel .
Вызов метода IPrintAsyncNotifyDataObject::AcquireData для этого уведомления возвращается с параметром BYTE** значение NULL, параметр ULONG* имеет значение 0, а параметр GUID* — NOTIFICATION_RELEASE.