如何处理Outlook插件中的HRESULT?

时间:2011-05-23 22:44:45

标签: c# outlook-addin comexception

基于这个SO答案:Catching COMException specific Error Code,我想知道,如果我只需要查看异常的特定部分,就可以在OS和多个版本的OL中正确处理COMExceptions。例如,

private const uint HRESULT_OPERATIONABORTED = 0x80004004;

// ...

    try {
        // something that could throw COMExceptions
    } catch (System.Runtime.InteropServices.COMException e) {

        switch ((uint)e.ErrorCode) {

            case HRESULT_OPERATIONABORTED:
                break;

            default:
                break;
        }
    }

这是否足够跨平台,或者只考虑错误代码的一部分?

编辑 - 为了澄清,我的确切问题是,(uint)e.ErrorCode0x80004004的比较是否过于具体(也就是说,我总是获取{{ 1}}对于这个特定的错误,无论OS / OL如何),或者这是否是正确的做事方式。

2 个答案:

答案 0 :(得分:0)

您可能还想考虑捕获System.OutOfMemoryException和其他异常,这些异常是从COM对象返回的HRESULT的结果。并非所有失败的HRESULT都会导致COMException。

对于我见过的大多数MAPI错误,错误代码与标准C MAPI头文件中声明的错误代码不同,所以我认为switch语句没问题。换句话说,该方法不应该与C编写的MAPI客户端应用程序兼容。

答案 1 :(得分:0)

就跨平台竞争而言,你几乎不用担心,COM只能在Windows上运行。类似地,错误代码是一个定义良好的代码。您可以在WinError.h SDK头文件中查找标准COM错误代码。这是E_ABORT。我建议你实际使用那个标识符。

你会在c:\ program files \ microsoft sdks \ windows \ v6.0 \ include中找到这个标题。 VS2010是v7.0。