代码之家  ›  专栏  ›  技术社区  ›  Kristopher Johnson

.NET中comException-hresult错误代码的符号名

  •  3
  • Kristopher Johnson  · 技术社区  · 15 年前

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

    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_失败、e_内存不足、e_意外等符号的任何位置。对于本机win32应用程序,可以从<winerrror.h>(请参见 http://msdn.microsoft.com/en-us/library/aa378137(VS.85).aspx )

    我当然可以自己定义它们,无论我在哪里需要它们,就像这样:

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

    但如果可以的话,我更愿意从标准的地方获得定义。我想我曾经在某个地方找到过它们的定义,但是我的msdn搜索现在找不到它们。

    在.NET库中有一组这样的定义吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   shf301    15 年前

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

    你也不会收到 COMException 对于 E_OUTOFMEMORY . 会产生一个 OutOfMemoryExcetpion . 运行时间将映射 HRESULTS 它知道有意义的例外。见 mapping definition 在MSDN上。

    推荐文章