在C#中转换COM错误代码

问题描述:

在C,Pascal和C++中,可以使用FormatMessage函数检索对应于COM HRESULT错误代码的“友好”错误消息。 This question包含演示C++方法的示例代码。当然,构建一个托管的C++程序集来执行C#和VB.NET代码的这个功能是可能的,但是我想知道:有没有办法使用.NET系统库来翻译COM错误代码?在C#中转换COM错误代码

FormatMessage已由Win32Exception内部使用。例如:

using System; 

class Program { 
    static void Main(string[] args) { 
     var ex = new System.ComponentModel.Win32Exception(unchecked((int)0x80004005)); 
     Console.WriteLine(ex.Message); 
     Console.ReadLine(); 
    } 
} 

输出:未指定的错误

一定要避免绕过正常HRESULT检查的方法是,其COM互操作层的CLR实现。它使用IErrorInfo从COM服务器获取丰富的错误文本。这会让你获得'真正'的错误信息,而不是通用的错误信息。

Marshal.GetExceptionForHR();

不要忽视的是,页面会转至How to: Map HRESULTs and Exceptions链接。

+0

它不看这个,它将提供您可以从FormatMessage()获得的描述性消息。例如,使用GetExceptionForHR()从E_FAIL创建的Exception的Message属性只是说:“错误HRESULT E_FAIL已经从调用COM组件返回” – 2011-01-07 01:35:31