Compartilhar via


Valores retornados do manipulador de erros WIA

Todos os manipuladores de erros devem aderir a várias regras relacionadas ao valor retornado.

A seguir estão todos os valores retornados válidos:

S_OK
O código de status do dispositivo foi tratado com êxito. Nenhum manipulador de erro será invocado.

No caso de um erro status código (caixa de diálogo modal), isso significa que medidas apropriadas foram tomadas para corrigir o erro, como um congestionamento de papel para um ADF.

No caso de um código de status informativo, isso significa apenas que a ação apropriada foi tomada para fornecer ao usuário uma caixa de diálogo sem formação e que a mensagem do dispositivo não deve ser encaminhada para nenhum outro manipulador de erro abaixo da linha.

WIA_STATUS_NOT_HANDLED
Nenhuma ação foi tomada para lidar com o erro ou relatar status ao usuário. O próximo manipulador (se houver) na lista será invocado.

Esse deve ser o valor retornado padrão do manipulador de erros.

S_FALSE
O usuário cancelou a transferência da caixa de diálogo sem formatar do manipulador. Esse valor retornado pode ser retornado a qualquer momento pelo manipulador de erros, independentemente do dispositivo status código (manipulado, sem tratamento, erro ou informativo).

Outros códigos de erro
Se um erro de dispositivo não puder ser recuperado ou se o usuário optar por interromper a transferência em resposta à caixa de diálogo modal exibida, o manipulador de erros deverá retornar o dispositivo status próprio código (consulte exemplos na seção Exemplos). Isso, é claro, implica que o manipulador de erros manipula o dispositivo status código.

Além disso, um manipulador de erros deve ser consistente no tratamento de códigos de status do dispositivo. Ou seja, uma instância do manipulador de erros não pode optar por lidar com status código WIA_STATUS_XYZ (ou WIA_ERROR_XYZ) no momento t0 e, em seguida, decidir não lidar com isso no momento t1.

O código a seguir é um exemplo de um manipulador de erros invá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;
}

Remover a rotina HandleMessageNow tornaria esse um manipulador de erros válido.