我希望有人可以帮助我.我有一个COM需要捕获的特定异常,然后尝试做其他事情,其他所有都应该被忽略.我的错误消息是异常:
System.Runtime.InteropServices.COMException(0x800A03EC):Microsoft Office Excel无法访问文件"C:\ test.xls".有几个可能的原因:
所以我最初的尝试是
try
{
// something
}
catch (COMException ce)
{
if (ce.ErrorCode == 0x800A03EC)
{
// try something else
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我读了一个编译器警告:
警告22与积分常数的比较是无用的; 常量超出了'int'类型的范围..... ExcelReader.cs 629 21
现在我知道0x800A03EC是HResult,我刚看了MSDN并阅读:
HRESULT是一个32位值,分为三个不同的字段:严重性代码,设施代码和错误代码.严重性代码指示返回值是表示信息,警告还是错误.设施代码标识负责该错误的系统区域.
所以我的最终问题是,我如何确保捕获该特定异常?或者我如何从HResult获取错误代码?
提前致谢.
Pao*_*sco 38
ErrorCode应该是无符号整数; 你可以按如下方式进行比较:
try {
// something
} catch (COMException ce) {
if ((uint)ce.ErrorCode == 0x800A03EC) {
// try something else
}
}
Run Code Online (Sandbox Code Playgroud)
Sco*_*bie 10
HRESULT值有32位,分为三个字段:严重性代码,设施代码和错误代码.严重性代码指示返回值是表示信息,警告还是错误.该设备代码标识负责错误的系统的区域.该错误代码是一个唯一的编号分配给代表例外.每个异常都映射到不同的HRESULT. 摘自:http://en.wikipedia.org/wiki/HRESULT
根据我收集的内容,HRESULT位的前半部分可能会根据导致异常的系统/进程而发生变化.后半部分包含错误类型.
代码应如下所示:
try {
// something
} catch (COMException ce) {
if ((uint)ce.ErrorCode & 0x0000FFFF == 0x800A03EC) {
// try something else
}
}
Run Code Online (Sandbox Code Playgroud)
注意:请记住我不是.NET的人,所以在上面的代码中厌倦了语法错误.
| 归档时间: |
|
| 查看次数: |
30288 次 |
| 最近记录: |