Méthode IPrintAsyncNotifyChannel ::SendNotification (prnasnot.h)
Envoie une notification à partir d’un composant hébergé par le spouleur d’impression à une ou plusieurs applications à l’écoute, ou envoie une réponse d’une application à un composant.
Syntaxe
HRESULT SendNotification(
[in] IPrintAsyncNotifyDataObject *pData
);
Paramètres
[in] pData
Pointeur vers le contenu de la notification, sa taille et son type.
Valeur retournée
HRESULT | Gravité | Signification |
---|---|---|
S_OK | SUCCESS | La fonction s’est terminée avec succès. |
ASYNC_CALL_ALREADY_PARKED | ERROR | Impossible d’envoyer une notification, car le destinataire n’a pas consommé la notification précédente. |
ASYNC_CALL_IN_PROGRESS | ERROR | Le canal est occupé par une autre notification ou réponse. |
ASYNC_NOTIFICATION_FAILURE | ERROR | Aucun des écouteurs de ce canal n’est configuré pour recevoir ce type de notification ou il y a eu un problème d’allocation des ressources nécessaires pour terminer cet appel. |
CHANNEL_ACQUIRED | ERROR | Un autre écouteur a acquis ce canal. La notification n’a pas été envoyée. L’écouteur d’origine ne reçoit plus de notifications. |
CHANNEL_ALREADY_CLOSED | ERROR | La notification n’a pas pu être envoyée, car le canal a été fermé avant cet appel. |
CHANNEL_NOT_OPENED | ERROR | La notification n’a pas pu être envoyée, car le canal n’a pas été ouvert avant cet appel. |
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION | ERROR | Impossible d’envoyer une notification, car aucune réponse à la dernière notification n’a été reçue. |
INVALID_NOTIFICATION_TYPE | ERROR | Le type de notification spécifié n’est pas valide. |
MAX_NOTIFICATION_SIZE_EXCEEDED | ERROR | La taille maximale des données de notification a été dépassée. Par défaut, la taille de données maximale autorisée est de 10 mégaoctets. |
NO_LISTENERS | SUCCESS | Indique qu’il n’existe aucune application d’écoute inscrite. |
UNIRECTIONAL_NOTIFICATION_LOST | SUCCESS | Un ou plusieurs écouteurs n’ont pas reçu cette notification, mais au moins un écouteur a reçu cette notification. |
Les valeurs retournées sont des codes d’erreur COM. Étant donné que cette fonction peut terminer l’opération avec succès tout en renvoyant un HRESULT autre que S_OK vous devez utiliser la macro SUCCEEDED ou FAILED pour déterminer la réussite de l’appel. Pour obtenir le HRESULT spécifique retourné par la fonction, utilisez la macro HRESULT_CODE. L’exemple de code suivant montre comment ces macros peuvent être utilisées.
Consultez PrintAsyncNotifyError pour obtenir d’autres valeurs de retour possibles.
Pour plus d’informations sur les codes d’erreur COM, consultez Gestion des erreurs.
if (SUCCEEDED(hr)) {
// Call succeeded, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case S_OK:
// Some action
break;
case NO_LISTENERS:
// Some action
break;
case UNIRECTIONAL_NOTIFICATION_LOST:
// Some action
break;
default:
// Default action
break;
}
} else {
// Call failed, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case ASYNC_NOTIFICATION_FAILURE:
// Some action
break;
case CHANNEL_ALREADY_CLOSED:
// Some action
break;
case CHANNEL_NOT_OPENED:
// Some action
break;
//
// ... Test for other error cases
//
default:
// Default action
break;
}
}
Remarques
Pour un canal unidirectionnel, si un appel SendNotification est effectué pendant que le spouleur d’impression traite un appel SendNotification antérieur, le spouleur d’impression met en file d’attente la notification en attente. Les notifications en file d’attente sont ignorées si le composant hébergé par le spouleur d’impression ou l’application appelle IPrintAsyncNotifyChannel ::CloseChannel.
Pour un canal bidirectionnel, si un appel SendNotification est effectué pendant que le Print-Spooler traite un appel SendNotification antérieur, l’appel en attente échoue. Dans ce cas, si l’appelant est un expéditeur à l’intérieur du spouleur d’impression, SendNotification retourne CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION. Si l’appelant est un écouteur qui envoie une réponse, SendNotification retourne ASYNC_CALL_IN_PROGRESS.
Lorsque plusieurs écouteurs existent pour le même canal bidirectionnel, la notification initiale envoyée sur le canal est remise à tous les écouteurs. Le premier écouteur à répondre acquiert le canal. Les écouteurs appelant SendNotification après l’acquisition du canal échouent avec une erreur CHANNEL_ACQUIRED.
Un écouteur recevant une notification initiale sur un canal bidirectionnel peut ne pas être intéressé par l’acquisition du canal. Dans ce cas, l’écouteur peut appeler la méthode IUnknown ::Release . La méthode IUnknown ::Release n’a pas besoin d’être appelée si les méthodes SendNotification ou IPrintAsyncNotifyChannel ::CloseChannel sont appelées.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | prnasnot.h |
DLL | Prnasnot.dll |