다음을 통해 공유


WIA 오류 처리 예제

디바이스 상태 메시지를 보내는 드라이버의 예는 WIA(Windows 이미지 획득) 드라이버 샘플에서 확장 WIA 2.0 몬스터 드라이버 샘플을 참조하세요. 이 샘플에서는 간단한 오류 처리기를 구현하는 방법을 보여 줍니다.

예: 확장 프로그램 오류 처리

다음 코드 조각은 간단한 오류 전달 확장을 구현하는 방법을 보여줍니다. 이 오류 처리 확장은 WIA_ERROR_COVER_OPEN 디바이스 상태 오류만 처리하고 모달 대화 상자를 표시합니다. 이 예제를 간소화하기 위해 일부 코드가 생략되었습니다.

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;

}