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

Exception.HResult可以说,定义asUInt32而不是Int32aka与 Win32 API 更一致int

可能这没有完成,因为 UInt32 不符合 CLS。

我建议您将常量定义为 int:

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

comex.ErrorCode是一个 Int32(请参见此处)并且您Constants.E_FAIL超出了 Int32 限制(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 回答