Compartir a través de


Valores devueltos del controlador de errores de WIA

Todos los controladores de errores deben cumplir una serie de reglas con respecto a su valor devuelto.

A continuación se muestran todos los valores devueltos válidos:

S_OK
El código de estado del dispositivo se controló correctamente. No se invocarán más controladores de errores.

En el caso de un código de estado de error (cuadro de diálogo modal), esto significa que se realizó la acción adecuada para corregir el error, como un atasco de papel para una ADF.

En el caso de un código de estado informativo, esto solo significa que se realizó la acción adecuada para proporcionar al usuario un cuadro de diálogo modelado y que el mensaje del dispositivo no se debe reenviar a ningún otro controlador de errores por la línea.

WIA_STATUS_NOT_HANDLED
No se ha realizado ninguna acción para controlar el estado del error o informe al usuario. Se invocará el siguiente controlador (si existe) de la lista.

Debe ser el valor devuelto predeterminado del controlador de errores.

S_FALSE
El usuario canceló la transferencia desde el cuadro de diálogo de modelos del controlador. El controlador de errores puede devolver este valor devuelto en cualquier momento, independientemente de cuál sea el código de estado del dispositivo (controlado, no controlado, error o informativo).

Otros códigos de error
Si no se puede recuperar un error del dispositivo o si el usuario decide detener la transferencia en respuesta al cuadro de diálogo modal mostrado, el controlador de errores debe devolver el propio código de estado del dispositivo (consulte ejemplos en la sección Ejemplos). Esto, por supuesto, implica que el controlador de errores controla el código de estado del dispositivo.

Además, un controlador de errores debe ser coherente en el control de los códigos de estado del dispositivo. Es decir, una instancia del controlador de errores no puede elegir controlar el código de estado WIA_STATUS_XYZ (o WIA_ERROR_XYZ) en el momento t0 y, a continuación, decidir no controlarlo en el momento t1.

El código siguiente es un ejemplo de un controlador de errores no válido:

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;
}

Al quitar la rutina HandleMessageNow , este controlador de errores es válido.