0

com 例外から HRESULT の値を取得しようとすると警告が表示されます。これが C# で COM 例外を処理する正しい方法ではないのではないかと疑っています。コードは次のようになります。

try
{
 ...                      
}
catch (System.Runtime.InteropServices.COMException comex)
{
 // Warning 8   Comparison to integral constant is useless; the constant is outside the range of type 'int'

 if (comex.ErrorCode == Constants.E_FAIL)
 {

 }  

}

E_FAIL は次のように定義されます。

public const UInt32 E_FAIL = 0x80004005;
4

3 に答える 3

2

akaではなくException.HResultas として定義する方が、おそらく Win32 API とより一貫性があったでしょう。UInt32Int32int

UInt32 は CLS に準拠していないため、おそらくこれは行われませんでした。

定数を int として定義することをお勧めします。

public const int E_FAIL = unchecked((int)0x80004005); 
于 2012-05-29T11:37:05.710 に答える
0

comex.ErrorCodeは Int32 (こちらを参照) であり、Constants.E_FAILInt32 の制限 ( Int32.MaxValue= 7FFFFFFF) を超えています。

Int32 と UInt32 を比較しているようです。比較する前に後者を変換する必要があります...
たとえば、次のように使用できます

if (comex.ErrorCode == unchecked((int)Constants.E_FAIL))
于 2012-05-29T11:27:31.127 に答える
0

次のようなことができます。

if (comex.ErrorCode == unchecked((int)Constants.E_FAIL))
{
    // do stuff
}

ただし、一部のエラー コードは、特定の例外にマップされているため、表示されない可能性が高いことに注意E_FAILしてください。

于 2012-05-29T11:37:26.137 に答える