## Definição

Obtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.

``````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``

Int32

O valor HRESULT.

## Exemplos

O exemplo de código a seguir define uma classe derivada `Exception` que define a `HResult` propriedade como um valor personalizado em seu construtor.

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

## Comentários

HRESULT é um valor de 32 bits, dividido em três campos diferentes: um código de severidade, um código de facilidade e um código de erro. O código de severidade indica se o valor de retorno representa informações, aviso ou erro. O código de facilidade identifica a área do sistema responsável pelo erro. O código de erro é um número exclusivo atribuído para representar a exceção. Cada exceção é mapeada para um HRESULT distinto. Quando o código gerenciado gera uma exceção, o runtime passa o HRESULT para o cliente COM. Quando o código não gerenciado retorna um erro, o HRESULT é convertido em uma exceção, que é gerada pelo runtime. Para obter informações sobre valores HRESULT e suas exceções de .NET Framework correspondentes, consulte Como mapear HRESULTs e exceções. Consulte valores HRESULT comuns na documentação Windows para obter uma lista dos valores que você provavelmente encontrará.

A partir do .NET Framework 4.5, o HResult setter da propriedade é protegido, enquanto seu getter é público. Nas versões anteriores do .NET Framework, o getter e o setter são protegidos.