Exception et HResult

benadet Messages postés 1 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 7 mars 2006 - 7 mars 2006 à 19:43
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 8 mars 2006 à 05:24
Bonjour.



Je souhaite gérer dans mon application différents cas suivant les exceptions reçues.



Du genre :



try

{

}

catch (exception ex)

{

if (ex.HResult == 0x0000000)

{

}

}



Malheureusement, mon compilateur me dit que cette propriété n'est pas
accessible car elle est protégée (c'est effectivement le cas dans le
MSDN).



Quelqu'un connait-il une solution soit pour utiliser HResult ou soit
contourner ce problème (sans utiliser la comparaison avec la string de
ex.message ...)??



Merci d'avance.

1 réponse

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 mars 2006 à 05:24
Salut ça n'a pas d'interêt de tester le HRESULT des exceptions car il est invariable sauf pour les exceptions dérivant de ExternalException c-à-d en particulier Win32Exception et COMException, et les choses sont bien faites puisque ses deux classes possèdent la propriété ErrorCode qui est public.

Deux solutions à ton problème :



// 1 ) Catcher les exceptions en cascade :


try
{
throw new NullReferenceException( );
}
catch ( NullReferenceException ex )
{
// ici HRESULT est toujour égale à COR_E_NULLREFERENCE ( 0x80004003 ).
}
catch ( Exception ex )
{
// case générique elle doit être positionnée en dernier !
}


// 2 ) Catcher toutes les exceptions :


try
{
throw new ArgumentException( );
}
catch ( Exception ex )
{
if ( ex is NullReferenceException )
{
// ..
}


if ( ex is ArgumentException )
{
// ici HRESULT est toujours égale à COR_E_ARGUMENT ( 0x80070057 ).
}
}
0
Rejoignez-nous