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 库中的某处是否有一组这样的定义?

4

1 回答 1

2

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

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

于 2010-08-29T01:44:49.063 回答