benadet
Messages postés1Date d'inscriptionmercredi 12 novembre 2003StatutMembreDernière intervention 7 mars 2006
-
7 mars 2006 à 19:43
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 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 ...)??
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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 ).
}
}