【问题标题】:How to handle HRESULTs in Outlook addin?如何在 Outlook 插件中处理 HRESULT?
【发布时间】:2011-05-24 07:19:20
【问题描述】:

基于这个 SO 答案:Catching COMException specific Error Code,我想知道,如果我只需要查看异常的特定部分,是否可以跨操作系统和多个版本的 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 是否过于具体(也就是说,我是否总是得到 0x80004004 这个特定的错误,无论 OS/OL 是什么),或者这是否是正确的处理方式。

【问题讨论】:

    标签: c# outlook-addin comexception


    【解决方案1】:

    就跨平台兼容性而言,您不必担心,COM 仅在 Windows 上运行。同样,错误代码是一个定义明确的错误代码。您可以在 WinError.h SDK 头文件中查找标准 COM 错误代码。它是 E_ABORT。我建议您实际使用该标识符。

    您可以在 c:\program files\microsoft sdks\windows\v6.0\include 中找到此标头。 VS2010是v7.0。

    【讨论】:

    • 我的意思只是介于 XP 和 Win7 之间。感谢标题,这正是我所需要的。
    【解决方案2】:

    您可能还需要考虑捕获诸如 System.OutOfMemoryException 和其他由 COM 对象返回的 HRESULT 导致的异常。并非所有失败的 HRESULT 都会导致 COMException。

    对于我见过的大多数 MAPI 错误,错误代码与标准 C MAPI 头文件中声明的代码没有什么不同,所以我认为 switch 语句会很好。换言之,该方法的兼容性不应低于 C 编写的 MAPI 客户端应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多