WIA 오류 처리기 반환 값
모든 오류 처리기는 반환 값과 관련된 여러 규칙을 준수해야 합니다.
다음은 모두 유효한 반환 값입니다.
S_OK
디바이스 상태 코드가 성공적으로 처리되었습니다. 더 이상 오류 처리기가 호출되지 않습니다.
오류 상태 코드(모달 대화 상자)의 경우 ADF에 대한 용지 걸림과 같은 오류를 수정하기 위해 적절한 조치를 취했음을 의미합니다.
정보 상태 코드의 경우 이는 사용자에게 모덜리스 대화 상자를 제공하기 위해 적절한 조치를 취했으며 디바이스 메시지를 줄 아래의 다른 오류 처리기로 전달해서는 안 됨을 의미합니다.
WIA_STATUS_NOT_HANDLED
오류를 처리하거나 사용자에게 상태 보고하는 작업이 수행되지 않았습니다. 목록에서 다음 처리기(있는 경우)가 호출됩니다.
오류 처리기의 기본 반환 값이어야 합니다.
S_FALSE
사용자가 처리기의 모덜리스 대화 상자에서 전송을 취소했습니다. 이 반환 값은 디바이스 상태 코드(처리됨, 처리되지 않음, 오류 또는 정보)에 관계없이 오류 처리기에서 언제든지 반환할 수 있습니다.
기타 오류 코드
디바이스 오류를 복구할 수 없거나 표시된 모달 대화 상자에 대한 응답으로 전송을 중지하도록 선택하는 경우 오류 처리기는 디바이스 상태 코드 자체를 반환해야 합니다(예제 섹션의 예제 참조). 물론 이는 오류 처리기가 디바이스 상태 코드를 처리한다는 것을 의미합니다.
또한 디바이스 상태 코드를 처리할 때 오류 처리기가 일관되어야 합니다. 즉, 오류 처리기의 instance t0 시간에 상태 코드 WIA_STATUS_XYZ(또는 WIA_ERROR_XYZ)를 처리하도록 선택한 다음 t1 시간에 처리하지 않기로 결정할 수 없습니다.
다음 코드는 잘못된 오류 처리기의 예입니다.
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;
}
HandleMessageNow 루틴을 제거하면 유효한 오류 처리기가 됩니다.