Exception.HResult Propriété

Définition

Obtient ou définit HRESULT, valeur numérique codée qui est assignée à une exception spécifique.

public:  property int HResult {  public:
int get(); protected:
 void set(int value); };
public:
 property int HResult { int get(); void set(int value); };
protected:
 property int HResult { int get(); void set(int value); };
public int HResult { get; protected set; }
public int HResult { get; set; }
protected int HResult { get; set; }
member this.HResult : int with get, set
Public Property HResult As Integer
Protected Property HResult As Integer

Valeur de propriété

Int32

Valeur HRESULT.

Exemples

L’exemple de code suivant définit une classe dérivée Exception qui définit la HResult propriété sur une valeur personnalisée dans son constructeur.

// Example for the Exception::HResult property.
using namespace System;

namespace NDP_UE_CPP
{

   // Create the derived exception class.
   ref class SecondLevelException: public Exception
   {
   private:
      static int SecondLevelHResult = (int)0x81234567;

   public:

      // Set HResult for this exception, and include it in 
      // the exception message.
      SecondLevelException( String^ message, Exception^ inner )
         : Exception( String::Format( "(HRESULT:0x{1:X8}) {0}", message, SecondLevelHResult ), inner )
      {
         HResult = SecondLevelHResult;
      }

   };


   // This function forces a division by 0 and throws 
   // a second exception.
   void DivideBy0()
   {
      try
      {
         try
         {
            int zero = 0;
            int ecks = 1 / zero;
         }
         catch ( Exception^ ex ) 
         {
            throw gcnew SecondLevelException( "Forced a division by 0 and threw "
            "a second exception.",ex );
         }

      }
      catch ( Exception^ ex ) 
      {
         Console::WriteLine( ex->ToString() );
      }

   }

}

int main()
{
   NDP_UE_CPP::DivideBy0();
}

/*
This example of Exception::HResult generates the following output.

NDP_UE_CPP.SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 an
d threw a second exception. ---> System.DivideByZeroException: Attempted to div
ide by zero.
   at NDP_UE_CPP.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CPP.DivideBy0()
*/
// Example for the Exception.HResult property.
using System;

namespace NDP_UE_CS
{
    // Create the derived exception class.
    class SecondLevelException : Exception
    {
        const int SecondLevelHResult = unchecked( (int)0x81234567 );

        // Set HResult for this exception, and include it in
        // the exception message.
        public SecondLevelException( string message, Exception inner ) :
            base( string.Format( "(HRESULT:0x{1:X8}) {0}",
                message, SecondLevelHResult ), inner )
        {
            HResult = SecondLevelHResult;
        }
    }

    class HResultDemo
    {
        public static void Main()
        {
            // This function forces a division by 0 and throws
            // a second exception.
            try
            {
                try
                {
                    int  zero = 0;
                    int  ecks = 1 / zero;
                }
                catch( Exception ex )
                {
                    throw new SecondLevelException(
                        "Forced a division by 0 and threw " +
                        "a second exception.", ex );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of Exception.HResult generates the following output.

NDP_UE_CS.SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 and
 threw a second exception. ---> System.DivideByZeroException: Attempted to divi
de by zero.
   at NDP_UE_CS.HResultDemo.Main()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.HResultDemo.Main()
*/
// Example for the Exception.HResult property.
open System

let secondLevelHResult = 0x81234567

// Create the derived exception class.
// Set HResult for this exception, and include it in the exception message.
type SecondLevelException(message, inner) as this =
    inherit Exception($"(HRESULT:0x{secondLevelHResult:X8}) %s{message}", inner)
    do
        this.HResult <- secondLevelHResult

// The following forces a division by 0 and throws a second exception.
try
    try
        let zero = 0
        let ecks = 1 / zero
        ()
    with ex ->
        raise (SecondLevelException("Forced a division by 0 and threw a second exception.", ex) )
with ex ->
    printfn $"{ex}"

// This example of Exception.HResult generates the following output.
//
// NDP_UE_FS+SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 and
//  threw a second exception. ---> System.DivideByZeroException: Attempted to divi
// de by zero.
//    at <StartupCode$fs>.$NDP_UE_FS.main@()
//    --- End of inner exception stack trace ---
//    at <StartupCode$fs>.$NDP_UE_FS.main@()
' Example for the Exception.HResult property.
Namespace NDP_UE_VB

    ' Create the derived exception class.
    Class SecondLevelException
        Inherits Exception

        Private Const SecondLevelHResult As Integer = &H81234567
       
        ' Set HResult for this exception, and include it in 
        ' the exception message.
        Public Sub New(message As String, inner As Exception)

            MyBase.New( String.Format( "(HRESULT:0x{1:X8}) {0}", _
                message, SecondLevelHResult ), inner )
            HResult = SecondLevelHResult
        End Sub
    End Class

    Module HResultDemo
       
        Sub Main()
            ' This function forces a division by 0 and throws 
            ' a second exception.
            Try
                Try
                    Dim zero As Integer = 0
                    Dim ecks As Integer = 1 \ zero

                Catch ex As Exception
                    Throw New SecondLevelException( _
                        "Forced a division by 0 and threw " & _
                        "a second exception.", ex )
                End Try
              
            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub

    End Module ' HResultDemo
End Namespace ' NDP_UE_VB

' This example of Exception.HResult generates the following output.
' 
' NDP_UE_VB.SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 a
' nd threw a second exception. ---> System.DivideByZeroException: Attempted to
' divide by zero.
'    at NDP_UE_VB.HResultDemo.Main()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.HResultDemo.Main()

Remarques

HRESULT est une valeur 32 bits, composée de trois champs différents : un code de gravité d'erreur, un code de fonctionnalité, et un code d'erreur. Le code de gravité d'erreur indique si la valeur de retour représente les informations, l'avertissement, ou l'erreur. Le code de fonctionnalité identifie la zone du système responsable de l'erreur. Le code d'erreur est un nombre unique affecté pour représenter une exception. Chaque exception est mappée à un HRESULT distinct. Lorsque le code managé lève une exception, le runtime transmet HRESULT au client COM. Lorsque le code non managé retourne une erreur, HRESULT est converti en exception, qui est ensuite levée par le runtime. Pour plus d’informations sur les valeurs HRESULT et leurs exceptions .NET Framework correspondantes, consultez Guide pratique pour mapper les HRESULT et les exceptions. Consultez les valeurs HRESULT courantes dans la documentation Windows pour obtenir la liste des valeurs que vous êtes le plus susceptible de rencontrer.

À compter de .NET Framework 4.5, le setter de la HResult propriété est protégé, tandis que son getter est public. Dans les versions précédentes du .NET Framework, getter et setter sont protégés.

S’applique à

Voir aussi