IPrintAsyncNotifyChannel::SendNotification-Methode (prnasnot.h)
Sendet eine Benachrichtigung von einer Komponente, die vom Druckspooler gehostet wird, an eine oder mehrere lauschende Anwendungen oder sendet eine Antwort von einer Anwendung zurück an eine Komponente.
Syntax
HRESULT SendNotification(
[in] IPrintAsyncNotifyDataObject *pData
);
Parameter
[in] pData
Ein Zeiger auf den Inhalt der Benachrichtigung und deren Größe und Typ.
Rückgabewert
HRESULT | Schweregrad | Bedeutung |
---|---|---|
S_OK | SUCCESS | Die Funktion wurde erfolgreich abgeschlossen. |
ASYNC_CALL_ALREADY_PARKED | ERROR | Eine Benachrichtigung kann nicht gesendet werden, weil der Empfänger die vorherige Benachrichtigung nicht genutzt hat. |
ASYNC_CALL_IN_PROGRESS | ERROR | Der Kanal ist mit einer anderen Benachrichtigung oder Antwort ausgelastet. |
ASYNC_NOTIFICATION_FAILURE | ERROR | Keiner der Listener in diesem Kanal ist für den Empfang dieses Benachrichtigungstyps konfiguriert, oder es ist ein Problem beim Zuweisen der Ressourcen aufgetreten, die zum Abschließen dieses Aufrufs erforderlich sind. |
CHANNEL_ACQUIRED | ERROR | Ein anderer Listener hat diesen Kanal erworben. Die Benachrichtigung wurde nicht gesendet. Der ursprüngliche Listener empfängt keine Benachrichtigungen mehr. |
CHANNEL_ALREADY_CLOSED | ERROR | Die Benachrichtigung konnte nicht gesendet werden, weil der Kanal vor diesem Anruf geschlossen wurde. |
CHANNEL_NOT_OPENED | ERROR | Die Benachrichtigung konnte nicht gesendet werden, weil der Kanal vor diesem Anruf nicht geöffnet wurde. |
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION | ERROR | Eine Benachrichtigung kann nicht gesendet werden, da keine Antwort auf die letzte Benachrichtigung empfangen wurde. |
INVALID_NOTIFICATION_TYPE | ERROR | Der angegebene Benachrichtigungstyp ist ungültig. |
MAX_NOTIFICATION_SIZE_EXCEEDED | ERROR | Die maximale Größe der Benachrichtigungsdaten wurde überschritten. Standardmäßig beträgt die maximal zulässige Datengröße 10 Megabyte. |
NO_LISTENERS | SUCCESS | Gibt an, dass keine registrierten Lauschanwendungen vorhanden sind. |
UNIRECTIONAL_NOTIFICATION_LOST | SUCCESS | Mindestens ein Listener hat diese Benachrichtigung nicht erhalten, aber mindestens ein Listener hat diese Benachrichtigung erhalten. |
Die Rückgabewerte sind COM-Fehlercodes. Da diese Funktion den Vorgang möglicherweise erfolgreich abgeschlossen hat, aber ein anderes HRESULT als S_OK sollten Sie das Makro SUCCEEDED oder FAILED verwenden, um den Erfolg des Aufrufs zu bestimmen. Verwenden Sie das Makro HRESULT_CODE, um das spezifische HRESULT abzurufen, das von der Funktion zurückgegeben wurde. Das folgende Codebeispiel zeigt, wie diese Makros verwendet werden können.
Weitere mögliche Rückgabewerte finden Sie unter PrintAsyncNotifyError .
Weitere Informationen zu COM-Fehlercodes finden Sie unter Fehlerbehandlung.
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;
}
}
Hinweise
Wenn bei einem unidirektionalen Kanal ein SendNotification-Aufruf erfolgt, während der Druckspooler einen früheren SendNotification-Aufruf verarbeitet, wird die ausstehende Benachrichtigung vom Druckspooler in die Warteschlange gestellt. Benachrichtigungen in der Warteschlange werden verworfen, wenn entweder die vom Druckspooler gehostete Komponente oder die Anwendung IPrintAsyncNotifyChannel::CloseChannel aufruft.
Wenn für einen bidirektionalen Kanal ein SendNotification-Aufruf ausgeführt wird, während die Print-Spooler einen früheren SendNotification-Aufruf verarbeitet, schlägt der ausstehende Aufruf fehl. Wenn der Aufrufer in diesem Fall ein Absender innerhalb des Druckspoolers ist, gibt SendNotification CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION zurück. Wenn der Aufrufer ein Listener ist, der eine Antwort sendet, gibt SendNotification ASYNC_CALL_IN_PROGRESS zurück.
Wenn mehrere Listener für denselben bidirektionalen Kanal vorhanden sind, wird die anfängliche Benachrichtigung, die über den Kanal gesendet wird, an alle Listener übermittelt. Der erste Listener, der antwortet, ruft den Kanal ab. Listener, die SendNotification aufrufen, nachdem der Kanal abgerufen wurde, schlagen mit einem Fehler CHANNEL_ACQUIRED fehl.
Ein Listener, der eine erste Benachrichtigung in einem bidirektionalen Kanal empfängt, ist möglicherweise nicht am Abrufen des Kanals interessiert. In diesem Fall kann der Listener die IUnknown::Release-Methode aufrufen. Die IUnknown::Release-Methode muss nicht aufgerufen werden, wenn die Methoden SendNotification oder IPrintAsyncNotifyChannel::CloseChannel aufgerufen werden.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | prnasnot.h |
DLL | Prnasnot.dll |