如何处理Outlook插件中的HRESULT?

问题描述

| 我想知道,基于这个SO答案:捕获COMException特定的错误代码,如果我只需要查看异常的特定部分,就可以跨操作系统和OL的多个版本正确处理COMException。例如,
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.ErrorCode
0x80004004
是否太具体(也就是说,对于这个特定错误,无论是否使用OS / OL,我是否总是得到
0x80004004
),或者这是否是正确的方法做事情。     

解决方法

就跨平台兼容性而言,您几乎不必担心,COM仅在Windows上运行。同样,错误代码是定义良好的代码。您可以在WinError.h SDK头文件中查找标准COM错误代码。是E_ABORT。我建议您实际使用该标识符。 您可以在c:\\ program files \\ microsoft sdks \\ windows \\ v6.0 \\ include中找到此标头。 VS2010是v7.0。     ,您可能还需要考虑捕获诸如System.OutOfMemoryException之类的东西,以及其他异常,这些异常是从COM对象返回的HRESULT的结果。并非所有失败的HRESULT都会导致COMException。 对于我见过的大多数MAPI错误,错误代码与标准C MAPI头文件中声明的内容没有区别,因此我认为switch语句会很好。换句话说,该方法的兼容性应该不比C编写的MAPI客户端应用程序低。