我希望能够在我的.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库中是否有一组这样的定义?
答案 0 :(得分:2)
我不认为框架本身有一个。也许你找到了list at pinvoke.net。不要担心值的变化。 C头文件中的值被编译到应用程序中,因此在不破坏现有的每个COM应用程序的情况下都无法更改它们。
另外,COMException
您将收不到E_OUTOFMEMORY
。这将生成OutOfMemoryExcetpion
。运行时将映射它知道的HRESULTS
有意义的异常。请参阅MSDN上的mapping definition。