Share via


Metodo IPrintAsyncNotifyChannel::SendNotification (prnasnot.h)

Invia una notifica da un componente ospitato dallo spooler di stampa a una o più applicazioni in ascolto oppure invia una risposta da un'applicazione a un componente.

Sintassi

HRESULT SendNotification(
  [in] IPrintAsyncNotifyDataObject *pData
);

Parametri

[in] pData

Puntatore al contenuto della notifica e alle relative dimensioni e tipo.

Valore restituito

HRESULT Gravità Significato
S_OK SUCCESS La funzione è stata completata correttamente.
ASYNC_CALL_ALREADY_PARKED ERRORE Impossibile inviare una notifica perché il destinatario non ha utilizzato la notifica precedente.
ASYNC_CALL_IN_PROGRESS ERRORE Il canale è occupato con un'altra notifica o risposta.
ASYNC_NOTIFICATION_FAILURE ERRORE Nessuno dei listener in questo canale è configurato per ricevere questo tipo di notifica o si è verificato un problema durante l'allocazione delle risorse necessarie per completare questa chiamata.
CHANNEL_ACQUIRED ERRORE Un altro listener ha acquisito questo canale. La notifica non è stata inviata. Il listener originale non riceverà più notifiche.
CHANNEL_ALREADY_CLOSED ERRORE Impossibile inviare la notifica perché il canale è stato chiuso prima di questa chiamata.
CHANNEL_NOT_OPENED ERRORE Impossibile inviare la notifica perché il canale non è stato aperto prima di questa chiamata.
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION ERRORE Non è possibile inviare una notifica perché non è stata ricevuta una risposta all'ultima notifica.
INVALID_NOTIFICATION_TYPE ERRORE Il tipo di notifica specificato non è valido.
MAX_NOTIFICATION_SIZE_EXCEEDED ERRORE È stata superata la dimensione massima dei dati di notifica. Per impostazione predefinita, le dimensioni massime consentite per i dati sono pari a 10 megabyte.
NO_LISTENERS SUCCESS Indica che non sono presenti applicazioni in ascolto registrate.
UNIRECTIONAL_NOTIFICATION_LOST SUCCESS Uno o più listener non hanno ricevuto questa notifica, ma almeno un listener ha ricevuto questa notifica.
 

I valori restituiti sono codici di errore COM. Poiché questa funzione potrebbe completare correttamente l'operazione ma restituisce un valore HRESULT diverso da S_OK è consigliabile utilizzare la macro SUCCEEDED o FAILED per determinare l'esito positivo della chiamata. Per ottenere l'HRESULT specifico restituito dalla funzione, usare la macro HRESULT_CODE. Nell'esempio di codice seguente viene illustrato come utilizzare queste macro.

Per altri valori restituiti possibili, vedere PrintAsyncNotifyError .

Per altre informazioni sui codici di errore COM, vedere Gestione degli errori.

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

Commenti

Per un canale unidirezionale, se viene effettuata una chiamata SendNotification mentre lo spooler di stampa sta elaborando una chiamata SendNotification precedente, lo spooler di stampa accoda la notifica in sospeso. Le notifiche in coda vengono eliminate se il componente ospitato dallo spooler di stampa o l'applicazione chiama IPrintAsyncNotifyChannel::CloseChannel.

Per un canale bidirezionale, se viene effettuata una chiamata SendNotification mentre il Print-Spooler elabora una chiamata SendNotification precedente, la chiamata in sospeso avrà esito negativo. In tal caso, se il chiamante è un mittente all'interno dello spooler di stampa, SendNotification restituisce CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION. Se il chiamante è un listener che invia una risposta, SendNotification restituisce ASYNC_CALL_IN_PROGRESS.

Quando esistono più listener per lo stesso canale bidirezionale, la notifica iniziale inviata sul canale verrà recapitata a tutti i listener. Il primo listener a rispondere acquisirà il canale. I listener che chiamano SendNotification dopo l'acquisizione del canale avranno esito negativo con errore CHANNEL_ACQUIRED.

Un listener che riceve una notifica iniziale su un canale bidirezionale potrebbe non essere interessato all'acquisizione del canale. In questo caso il listener può chiamare il metodo IUnknown::Release . Il metodo IUnknown::Release non deve essere chiamato se vengono chiamati i metodi SendNotification o IPrintAsyncNotifyChannel::CloseChannel .

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione prnasnot.h
DLL Prnasnot.dll

Vedi anche

Interfacce di notifica di stampa asincrone

IPrintAsyncNotifyChannel

Stampa