Funzione CreatePrintAsyncNotifyChannel (prnasnot.h)
Crea un canale di comunicazione tra un componente di stampa ospitato da Spooler di stampa, ad esempio un driver di stampa o un monitor porta, e un'applicazione che riceve notifiche dal componente.
Sintassi
HRESULT CreatePrintAsyncNotifyChannel(
[in] PCWSTR pszName,
[in] PrintAsyncNotificationType *pNotificationType,
[in] PrintAsyncNotifyUserFilter eUserFilter,
[in] PrintAsyncNotifyConversationStyle eConversationStyle,
[in] IPrintAsyncNotifyCallback *pCallback,
[out] IPrintAsyncNotifyChannel **ppIAsynchNotification
);
Parametri
[in] pszName
Puntatore al nome di un server di stampa o di una coda di stampa.
[in] pNotificationType
Puntatore al GUID dello schema dei dati per il tipo di notifiche da inviare nel canale.
[in] eUserFilter
Valore che specifica se le notifiche verranno inviate a:
- Solo le applicazioni in esecuzione con lo stesso utente del mittente del plug-in ospitato da Spooler di stampa.
- Un set più ampio di applicazioni in ascolto.
[in] eConversationStyle
Valore che specifica se la comunicazione è bidirezionale o unidirezionale.
[in] pCallback
Puntatore a un oggetto che verrà usato dall'applicazione in ascolto per richiamare il componente ospitato dallo Spooler di stampa. Deve essere NULL se la direzionalità è kUniDirectional.
[out] ppIAsynchNotification
Puntatore al nuovo canale.
Valore restituito
HRESULT | Gravità | Significato |
---|---|---|
S_OK | SUCCESS | La funzione è stata completata correttamente. |
CHANNEL_ALREADY_OPENED | ERRORE | Il canale è già stato aperto. |
MAX_CHANNEL_COUNT_EXCEEDED | ERRORE | Il numero massimo di applicazioni in ascolto è già registrato per il tipo di notifica specificato con la coda o il server di stampa specificato. Il valore massimo predefinito è 10.000. |
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 valutare il valore restituito.
if (SUCCEEDED(hr)){
//Call was successful
}
if (FAILED(hr)) {
// Call failed
}
if (FAILED(hr)) {
// Call failed
switch (HRESULT_CODE(hr)){
case CHANNEL_ALREADY_OPENED:
// Some action
break;
case MAX_CHANNEL_COUNT_EXCEEDED:
// Some action
break;
default:
//Default action
break;
}
} else {
//call succeeded
}
Per altre informazioni sui codici di errore COM, vedere Gestione degli errori.
Per altri valori restituiti possibili, vedere PrintAsyncNotifyError .
Commenti
Per chiudere un canale, chiamare IPrintAsyncNotifyChannel::CloseChannel; Tuttavia, IPrintAsyncNotifyChannel::CloseChannel non può essere chiamato immediatamente dopo la chiamata a CreatePrintAsyncNotifyChannel.
Chiamare solo IPrintAsyncNotifyChannel::Release():
- se si tratta di una corrispondenza esplicita con una chiamata IPrintAsyncNotifyChannel::AddRef() precedente.
- se il canale è un canale UniDirectional e si sta abbandonando il puntatore ricevuto in una chiamata riuscita a CreatePrintAsyncNotifyChannel.
- se, dopo aver creato un canale BiDirectional o nell'implementazione di IPrintNotifyAsyncCallback::OnEventNotify e:
- non è stato chiamato IPrintAsyncNotifyChannel::SendNotification o IPrintAsyncNotifyChannel::CloseChannel OR
- non è stata ritentata una chiamata a IPrintAsyncNotifyChannel::SendNotification o IPrintAsyncNotifyChannel::CloseChannel non riuscita
- sul lato server non è stata ritentata una chiamata a IPrintAsyncNotifyChannel::SendNotification riuscita con il valore restituito NO_LISTENER OR
- sul lato client non è stata ritentata una chiamata a IPrintAsyncNotifyChannel::SendNotification riuscita con il valore restituito CHANNEL_ACQUIRED.
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 |
Libreria | Winspool.lib |
DLL | Spoolss.dll |