COMException的符号名称HRESULT .NET中的错误代码

时间:2010-08-29 01:10:08

标签: .net comexception

我希望能够在我的.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应用程序,可以从< winerror.h>获取定义。 (见http://msdn.microsoft.com/en-us/library/aa378137(VS.85).aspx)。

我可以自己定义它们,无论我需要它们,就像这样:

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

但我更愿意从标准位置获取定义(如果有的话)。我想我发现它们曾经定义过一次,但是我的MSDN搜索现在还没找到它们。

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

1 个答案:

答案 0 :(得分:2)

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

另外,COMException您将收不到E_OUTOFMEMORY。这将生成OutOfMemoryExcetpion。运行时将映射它知道的HRESULTS有意义的异常。请参阅MSDN上的mapping definition