Compartir a través de


Valores devueltos del controlador de errores WIA

Todos los manejadores de errores deben cumplir una serie de normas respecto a su valor de retorno.

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

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

En el caso de que se presente un código de estado de error (cuadro de diálogo modal), significa que se tomó la acción adecuada para corregir el error, como un atasco de papel en el alimentador automático de documentos (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 de modelos y que el mensaje del dispositivo no se debe reenviar a ningún otro controlador de errores por la línea.

ESTADO_WIA_NO_GESTIONADO
No se realizó 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 modeless del controlador. El controlador de errores puede devolver este valor de retorno en cualquier momento, independientemente de cuál sea el código de estado del dispositivo (gestionado, no gestionado, error o informativo).

Otros códigos de error
Si no se puede recuperar un error de 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 (vea ejemplos en la sección Ejemplos). Por supuesto, esto 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;
}

Quitar la rutina HandleMessageNow haría que este sea un controlador de errores válido.