【问题标题】:Symbolic Names for COMException HRESULT Error Codes in .NET.NET 中 COMException HRESULT 错误代码的符号名称
【发布时间】:2010-08-29 01:10:08
【问题描述】:

我希望能够在我的 .NET 代码中使用由 COM 组件返回的 HRESULT 的标准符号名称。例如,我希望能够编写这样的代码:

try {
    someComObject->DoSomething();
}
catch (COMException ex) {
    if (ex.ErrorCode == E_FAIL) {
        HandleFail();
    }
    else if (ex.ErrorCode == E_OUTOFMEMORY) {
        HandleOutOfMemory();
    }
    else {
        HandleComError(ex.ErrorCode);
    }
}

但是,我在 .NET 框架中找不到定义 E_FAIL、E_OUTOFMEMORY、E_UNEXPECTED 等符号的任何地方。对于本机 Win32 应用程序,可以从 获取定义(请参阅http://msdn.microsoft.com/en-us/library/aa378137(VS.85).aspx)。

我当然可以自己定义它们,只要我需要它们,就像这样:

int E_FAIL = unchecked((int)0x80004005L);

但如果可用,我更愿意从标准位置获取定义。我想我曾经在某个地方找到了它们,但我的 MSDN 搜索现在没有找到它们。

.NET 库中是否有一组这样的定义?

【问题讨论】:

  • .NET 框架中有很多定义,都是内部的。您可以使用 Reflector 复制/粘贴它们。但是 pinvoke.net 列表可能更有用。

标签: .net comexception


【解决方案1】:

我认为框架本身没有。也许你找到了这个list at pinvoke.net。不要担心值的变化。 C 头文件中的值被编译到应用程序中,因此在不破坏现有的每个 COM 应用程序的情况下无法更改它们。

您也不会收到COMExceptionE_OUTOFMEMORY。这将生成一个OutOfMemoryExcetpion。运行时会将它知道的HRESULTS 映射到有意义的异常。请参阅 MSDN 上的 mapping definition

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 2020-03-27
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多