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;
}