Exception.HResult プロパティ

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。

Protected Property HResult As Integer
[C#]
protected int HResult {get; set;}
[C++]
protected: __property int get_HResult();protected: __property void set_HResult(int);
[JScript]
protected function get HResult() : int;protected function set HResult(int);

プロパティ値

HRESULT 値。

解説

HRESULT は 32 ビットの値で、重大度コード、機能コード、およびエラー コードの 3 つのフィールドに分けられます。重大度コードは、戻り値が情報、警告、エラーのいずれを表しているかを示します。機能コードは、エラーの原因になったシステムの領域を識別します。エラー コードは、例外を表すために割り当てられた一意の数値です。それぞれの例外は異なる HRESULT に割り当てられます。マネージ コードが例外をスローすると、ランタイムは COM クライアントに HRESULT を渡します。アンマネージ コードがエラーを返すと、HRESULT は例外に変換されてから、ランタイムによってスローされます。

使用例

[Visual Basic, C#, C++] HResult プロパティをコンストラクタに設定する派生 Exception クラスを定義するコード例を次に示します。

 
' Example for the Exception.HResult property.
Imports System
Imports Microsoft.VisualBasic

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 ' New
    End Class ' SecondLevelException

    Module HResultDemo
       
        Sub Main()
            Console.WriteLine( _
                "This example of Exception.HResult " & _
                "generates the following output." & vbCrLf )
              
            ' 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 ' Main

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

[C#] 
// 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() 
        {
            Console.WriteLine( 
                "This example of Exception.HResult " +
                "generates the following output.\n" );

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

[C++] 
// Example for the Exception::HResult property.
#using <mscorlib.dll>
using namespace System;

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

    // Set HResult for this exception, and include it in 
    // the exception message.
    public: 
        SecondLevelException( String* message, Exception* inner ) :
            Exception( String::Format( S"(HRESULT:0x{1:X8}) {0}", 
                message, __box( 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 new SecondLevelException( 
                    S"Forced a division by 0 and threw "
                    S"a second exception.", ex );
            }
        }
        catch( Exception* ex )
        {
            Console::WriteLine( ex->ToString( ) );
        }
    }
}

void main() 
{
    Console::WriteLine( 
        S"This example of Exception::HResult " 
        S"generates the following output.\n" );

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

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Exception クラス | Exception メンバ | System 名前空間