Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Alle Fehlerhandler müssen eine Reihe von Regeln hinsichtlich ihres Rückgabewerts einhalten.
Es folgen alle gültigen Rückgabewerte:
S_OK
Der Gerätestatuscode wurde erfolgreich verarbeitet. Es werden keine weiteren Fehlerhandler aufgerufen.
Im Falle eines Fehlerstatuscodes (Modaldialog) bedeutet dies, dass geeignete Maßnahmen ergriffen wurden, um den Fehler, wie ein Papierstau im ADF, zu beheben.
Bei einem Informationsstatus-Code bedeutet dies nur, dass die entsprechende Aktion ausgeführt wurde, um dem Benutzer ein modelloses Dialogfeld bereitzustellen, und dass die Gerätemeldung nicht an andere Fehlerhandler weitergeleitet werden sollte.
WIA_STATUS_NOT_HANDLED
Es wurde keine Aktion ausgeführt, um den Fehler- oder Berichtsstatus für den Benutzer zu behandeln. Der nächste Handler (falls vorhanden) in der Liste wird aufgerufen.
Dies sollte der Standardrückgabewert aus der Fehlerbehandlungsroutine sein.
S_FALSE
Der Benutzer hat die Übertragung aus dem modellosen Dialogfeld des Handlers abgebrochen. Dieser Rückgabewert kann jederzeit vom Fehlerhandler zurückgegeben werden, unabhängig davon, was der Gerätestatuscode ist (behandelt, nicht behandelt, Fehler oder Informationen).
Andere Fehlercodes
Wenn ein Gerätefehler nicht wiederhergestellt werden kann oder der Benutzer die Übertragung als Reaktion auf das angezeigte modale Dialogfeld beenden möchte, sollte der Fehlerhandler den Gerätestatuscode selbst zurückgeben (siehe Beispiele im Abschnitt "Beispiele"). Dies impliziert natürlich, dass der Fehlerhandler den Gerätestatuscode behandelt.
Darüber hinaus muss ein Fehlerhandler bei der Behandlung von Gerätestatuscodes konsistent sein. Das heißt, eine Instanz des Fehlerhandlers kann sich nicht für die Behandlung von Statuscode WIA_STATUS_XYZ (oder WIA_ERROR_XYZ) zum Zeitpunkt t0 entscheiden und sich dann entscheiden, ihn nicht zu behandeln.
Der folgende Code ist ein Beispiel für einen ungültigen Fehlerhandler:
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;
}
Das Entfernen der HandleMessageNow-Routine würde dies zu einem gültigen Fehlerhandler machen.