在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服务器获取丰富的错误文本。这会让你获得'真正'的错误信息,而不是通用的错误信息。
它不看这个,它将提供您可以从FormatMessage()获得的描述性消息。例如,使用GetExceptionForHR()从E_FAIL创建的Exception的Message属性只是说:“错误HRESULT E_FAIL已经从调用COM组件返回” – 2011-01-07 01:35:31