Valeurs de retour du gestionnaire d’erreurs WIA
Tous les gestionnaires d’erreurs doivent respecter un certain nombre de règles concernant leur valeur de retour.
Voici toutes les valeurs de retour valides :
S_OK
Le code de status d’appareil a été correctement géré. Plus aucun gestionnaire d’erreurs n’est appelé.
En cas d’erreur status code (boîte de dialogue modale), cela signifie que les mesures appropriées ont été prises pour corriger l’erreur, comme un blocage papier pour un ADF.
Dans le cas d’un code de status d’information, cela signifie uniquement que l’action appropriée a été effectuée pour fournir à l’utilisateur une boîte de dialogue sans mode et que le message de l’appareil ne doit pas être transféré à d’autres gestionnaires d’erreurs en bas de la ligne.
WIA_STATUS_NOT_HANDLED
Aucune action n’a été effectuée pour gérer l’erreur ou signaler status à l’utilisateur. Le gestionnaire suivant (le cas échéant) dans la liste sera appelé.
Il doit s’agir de la valeur de retour par défaut du gestionnaire d’erreurs.
S_FALSE
L’utilisateur a annulé le transfert à partir de la boîte de dialogue sans mode du gestionnaire. Cette valeur de retour peut être retournée à tout moment par le gestionnaire d’erreurs, quel que soit le code status de l’appareil (géré, non pris en charge, erreur ou informationnel).
Autres codes d’erreur
Si une erreur d’appareil ne peut pas être récupérée ou si l’utilisateur choisit d’arrêter le transfert en réponse à la boîte de dialogue modale affichée, le gestionnaire d’erreurs doit retourner l’appareil status code lui-même (voir les exemples dans la section Exemples). Cela implique bien sûr que le gestionnaire d’erreurs gère le code status de l’appareil.
En outre, un gestionnaire d’erreurs doit être cohérent dans la gestion des codes de status d’appareil. Autrement dit, un instance du gestionnaire d’erreurs ne peut pas choisir de gérer status code WIA_STATUS_XYZ (ou WIA_ERROR_XYZ) au moment t0, puis décider de ne pas le gérer au moment t1.
Le code suivant est un exemple de gestionnaire d’erreurs non valide :
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 suppression de la routine HandleMessageNow en ferait un gestionnaire d’erreurs valide.