Compartir a través de


Objeto de datos de notificación

Los datos de notificación se controlan como un objeto que expone la interfaz IPrintAsyncNotifyDataObject . Los clientes de la canalización de notificaciones del administrador de colas pueden definir su propio esquema de datos y pueden enviar cualquier tipo de datos hacia atrás y hacia adelante. Sin embargo, el administrador de trabajos de cola consulta el objeto de datos de notificación para un puntero BYTE*, la longitud de los datos y el tipo de notificación. El tipo de notificación es un GUID, como se describe en Tipos de notificación.

#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;
};

El remitente de la notificación debe empaquetar los datos en un objeto IPrintAsyncNotifyDataObject . El remitente debe implementar la interfaz IUnknown .

El cliente de escucha llama al método IPrintAsyncNotifyDataObject::AcquireData para obtener un puntero sin procesar a los datos de notificación, el tamaño de los datos de notificación y el tipo de notificación.

Cuando el cliente de escucha termine con los datos, debe llamar al método IPrintAsyncNotifyDataObject::ReleaseData . Los clientes de la canalización de notificación de cola deben implementar la interfaz IPrintAsyncNotifyDataObject de forma que, si se llama al método IPrintAsyncNotifyDataObject::Release antes de llamar al método IPrintAsyncNotifyDataObject::ReleaseData , el objeto no se libera. Se recomienda que una llamada al método IPrintAsyncNotifyDataObject::AcquireData incremente el recuento de referencias del objeto y que una llamada al método ReleaseData debe disminuir el recuento de referencias del objeto.

El administrador de trabajos define un GUID de tipo de notificación especial denominado NOTIFICATION_RELEASE. Cuando el administrador de colas o la aplicación de escucha mueren, el código de des rundown anuncia el final "todavía activo" del canal llamando al método IPrintAsyncNotifyChannel::CloseChannel .

Una llamada al método IPrintAsyncNotifyDataObject::AcquireData en esta notificación devuelve con el parámetro BYTE** establecido en NULL, el parámetro ULONG* establecido en 0 y el parámetro GUID* establecido en NOTIFICATION_RELEASE.