Valori restituiti del gestore errori WIA
Tutti i gestori degli errori devono rispettare una serie di regole relative al valore restituito.
Di seguito sono riportati tutti i valori restituiti validi:
S_OK
Il codice di stato del dispositivo è stato gestito correttamente. Non verranno richiamati altri gestori errori.
In caso di codice di stato di errore (finestra di dialogo modale), ciò significa che è stata eseguita un'azione appropriata per correggere l'errore, ad esempio un blocco di carta per un ADF.
Nel caso di un codice di stato informativo, ciò significa solo che è stata eseguita l'azione appropriata per fornire all'utente una finestra di dialogo senza modalità e che il messaggio del dispositivo non deve essere inoltrato ad altri gestori errori verso il basso della riga.
WIA_STATUS_NOT_HANDLED
Non è stata eseguita alcuna azione per gestire l'errore o segnalare lo stato all'utente. Verrà richiamato il gestore successivo (se presente) nell'elenco.
Deve trattarsi del valore restituito predefinito dal gestore degli errori.
S_FALSE
L'utente ha annullato il trasferimento dalla finestra di dialogo modeless del gestore. Questo valore restituito può essere restituito in qualsiasi punto dal gestore degli errori indipendentemente dal codice di stato del dispositivo (gestito, non gestito, errore o informativo).
Altri codici di errore
Se non è possibile recuperare un errore del dispositivo o se l'utente sceglie di arrestare il trasferimento in risposta alla finestra di dialogo modale visualizzata, il gestore degli errori deve restituire il codice di stato del dispositivo stesso (vedere esempi nella sezione Esempi). Questo implica naturalmente che il gestore degli errori gestisce il codice di stato del dispositivo.
Inoltre, un gestore degli errori deve essere coerente nella gestione dei codici di stato del dispositivo. Ovvero, un'istanza del gestore degli errori non può scegliere di gestire il codice di stato WIA_STATUS_XYZ (o WIA_ERROR_XYZ) al momento t0 e quindi decidere di non gestirlo al momento t1.
Il codice seguente è un esempio di gestore errori non valido:
STDMETHODIMP
CErrHandler::ReportStatus(
IN LONG lFlags,
IN HWND hwndParent,
IN IWiaItem2 *pWiaItem2,
IN HRESULT hrStatus,
IN LONG lPercentComplete)
{
HRESULT hr = WIA_STATUS_NOT_HANDLED;
if ((hrStatus == WIA_ERROR_PAPER_JAM) && HandleMessageNow())
{
...
}
return hr;
}
La rimozione della routine HandleMessageNow renderebbe questo gestore di errore valido.