Condividi tramite


Esempio di gestione degli errori WIA

Per un esempio di driver che invia messaggi di stato del dispositivo, vedi l'esempio del driver Monster WIA 2.0 esteso negli esempi di driver Windows Image Acquisition (WIA). L'esempio illustra come implementare un semplice gestore errori.

Esempio: Estensione per la gestione degli errori

Il frammento di codice seguente illustra come implementare una semplice estensione per la gestione degli errori. Questa estensione per la gestione degli errori gestisce solo l'errore di stato del dispositivo WIA_ERROR_COVER_OPEN e visualizza una finestra di dialogo modale. Si noti che alcuni del codice sono stati omessi per semplificare questo esempio.

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 (WIA_ERROR_COVER_OPEN == hrStatus)

    {

        int i;

        i = MessageBox(hwndParent,

        ERROR_COVER_OPEN_STR,

        TEXT("Driver UI Extension"),

        MB_RETRYCANCEL|MB_TASKMODAL|MB_ICONERROR);

        if (IDOK == i)

        {

            hr = S_OK;

        }

        else

        {

            hr = WIA_ERROR_COVER_OPEN;

        }

    }

    return hr;

}

STDMETHODIMP

CErrHandler::GetStatusDescription(

IN LONG lFlags,

IN IWiaItem2 *pWiaItem2,

IN HRESULT hrStatus,

OUT BSTR *pbstrDescription)

{

    HRESULT hr = pbstrDescription ? WIA_STATUS_NOT_HANDLED :

    E_INVALIDARG;

    if (WIA_ERROR_COVER_OPEN == hrStatus)

    {

        BSTR bstrDescription = NULL;

        bstrDescription = SysAllocString(ERROR_COVER_OPEN_STR);

        if (bstrDescription)

        {

            *pbstrDescription = bstrDescription;

            hr = S_OK;

        }

        else

        {

            hr = E_OUTOFMEMORY;

        }

    }

    return hr;

}