在C#中翻译COM错误代码

时间:2011-01-07 00:50:19

标签: c# vb.net com error-handling

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

2 个答案:

答案 0 :(得分:6)

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();
    }
}

输出:未指定的错误

请务必避免绕过CLR在其COM互操作层中完成的正常HRESULT检查。它使用IErrorInfo从COM服务器获取丰富的错误文本。这会让你得到“真正的”错误信息,而不是通用信息。

答案 1 :(得分:2)

Marshal.GetExceptionForHR();

请勿忽略该网页上指向How to: Map HRESULTs and Exceptions的链接。