Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wszystkie procedury obsługi błędów muszą być zgodne z wieloma regułami dotyczącymi ich wartości zwracanej.
Poniżej przedstawiono wszystkie prawidłowe wartości zwracane:
S_OK
Kod stanu urządzenia został pomyślnie obsłużony. Nie będą wywoływane żadne mechanizmy obsługi błędów.
W przypadku kodu stanu błędu (modalne okno dialogowe) oznacza to, że podjęto odpowiednie działania w celu skorygowania błędu, takiego jak zacięcie papieru w podajniku ADF.
W przypadku kodu stanu informacyjnego oznacza to tylko, że podjęto odpowiednie działania w celu udostępnienia użytkownikowi niemodalnego okna dialogowego i że komunikat urządzenia nie powinien być przekazywany na dalsze poziomy do żadnych innych procedur obsługi błędów.
WIA_STATUS_NOT_HANDLED
Nie podjęto żadnej akcji w celu obsługi stanu błędu lub zgłoszenia użytkownikowi. Następna procedura obsługi (jeśli istnieje) na liście zostanie wywołana.
Powinna to być domyślna wartość zwracana z programu obsługi błędów.
S_FALSE
Użytkownik anulował transfer z niemodalnego okna dialogowego obsługującego. Ta wartość zwracana może być w dowolnym momencie przez program obsługi błędów niezależnie od tego, jaki jest kod stanu urządzenia (obsługiwany, nieobsługiwany, błąd lub informacyjny).
Inne kody błędów
Jeśli nie można odzyskać błędu urządzenia lub jeśli użytkownik zdecyduje się zatrzymać transfer w odpowiedzi na wyświetlane modalne okno dialogowe, program obsługi błędów powinien zwrócić sam kod stanu urządzenia (zobacz przykłady w sekcji Przykłady). To oczywiście oznacza, że obsługiwacz błędów obsługuje kod statusu urządzenia.
Ponadto program obsługi błędów musi być spójny w obsłudze kodów stanu urządzenia. Oznacza to, że instancja programu obsługi błędów nie może na początku czasu t0 zdecydować się obsłużyć kod stanu WIA_STATUS_XYZ (lub WIA_ERROR_XYZ), a potem w czasie t1 zrezygnować z tej obsługi.
Poniższy kod to przykład nieprawidłowej procedury obsługi błędów:
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;
}
Usunięcie procedury HandleMessageNow spowoduje, że będzie to prawidłowa procedura obsługi błędów.