Ejemplo de control de errores de WIA
Para obtener un ejemplo de un controlador que envía mensajes de estado del dispositivo, consulta el ejemplo de controlador monster de WIA 2.0 extendido en los ejemplos de controladores de adquisición de imágenes de Windows (WIA). En el ejemplo se muestra cómo se puede implementar un controlador de errores simple.
Ejemplo: Extensión de control de errores
En el fragmento de código siguiente se muestra cómo se puede implementar una extensión simple de entrega de errores. Esta extensión de control de errores solo controla el error de estado del dispositivo WIA_ERROR_COVER_OPEN y muestra un cuadro de diálogo modal. Tenga en cuenta que se ha omitido parte del código para simplificar este ejemplo.
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;
}