Exception.HResult Eigenschaft

Definition

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.

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

Eigenschaftswert

Der HRESULT-Wert.

Beispiele

Im folgenden Codebeispiel wird eine abgeleitete Exception Klasse definiert, die die HResult Eigenschaft auf einen benutzerdefinierten Wert im Konstruktor festlegt.

// 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()

Hinweise

Bei HRESULT handelt es sich um einen 32-Bit-Wert, der in drei separate Felder unterteilt ist: Fehlergewichtung, Funktionscode und Fehlercode. Die Fehlergewichtung gibt an, ob der Rückgabewert Informationen, eine Warnung oder einen Fehler darstellt. Der Funktionscode identifiziert den Bereich des Systems, der für den Fehler verantwortlich ist. Der Fehlercode ist eine eindeutige Zahl, die zum Darstellen der Ausnahme zugewiesen wurde. Jede Ausnahme wird einem eindeutigen HRESULT zugeordnet. Wenn verwalteter Code eine Ausnahme auslöst, übergibt die Runtime das HRESULT an den COM-Client. Wenn nicht verwalteter Code einen Fehler zurückgibt, wird das HRESULT in eine Ausnahme konvertiert, die dann von der Runtime ausgelöst wird. Informationen zu HRESULT-Werten und den entsprechenden .NET Framework Ausnahmen finden Sie unter Vorgehensweise: Zuordnen von HRESULTs und Ausnahmen. Eine Liste der Werte, auf die Sie wahrscheinlich stoßen, finden Sie unter Allgemeine HRESULT-Werte in der Windows-Dokumentation.

Ab dem .NET Framework 4.5 ist der Setter der HResult Eigenschaft geschützt, während der Getter öffentlich ist. In früheren Versionen der .NET Framework sind sowohl Getter als auch Setter geschützt.

Gilt für:

Weitere Informationen