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 ファミリ