Exemple de gestion des erreurs WIA
Pour obtenir un exemple de pilote qui envoie des messages de status de périphérique, consultez l’exemple de pilote Monster WIA 2.0 étendu dans les exemples de pilotes d’acquisition d’images Windows (WIA). L’exemple illustre la façon dont un gestionnaire d’erreurs simple peut être implémenté.
Exemple : Extension de gestion des erreurs
L’extrait de code suivant montre comment une extension de remise d’erreur simple peut être implémentée. Cette extension de gestion des erreurs gère uniquement l’erreur WIA_ERROR_COVER_OPEN appareil status et affiche une boîte de dialogue modale. Notez qu’une partie du code a été omise pour simplifier cet exemple.
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;
}