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

3

我希望能在我的.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库中是否有一组这样的定义?


.NET框架中有很多定义,全部都是内部的。你可以使用Reflector复制/粘贴它们。但是pinvoke.net列表可能更有用。 - Hans Passant
1个回答

2
我认为框架本身没有这种东西。也许你找到了这个pinvoke.net上的列表。不要担心值的变化。C头文件中的值被编译进应用程序中,因此它们不能更改,否则会破坏现有的所有COM应用程序。
此外,您将不会收到COMException来表示E_OUTOFMEMORY。这将生成一个OutOfMemoryExcetpion。运行时将将其了解的HRESULTS映射到有意义的异常。请参见MSDN上的映射定义

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接