如何处理 C++ 加载的 C# DLL 中的异常

Posted

技术标签:

【中文标题】如何处理 C++ 加载的 C# DLL 中的异常【英文标题】:how to handle exceptions in C# DLL loaded by C++ 【发布时间】:2009-02-26 17:25:44 【问题描述】:

我有一个用 C# 创建的 DLL,目的是为第三方 C# 库提供 COM 接口。我有一个使用该 COM 接口的 C++ 程序,以便它可以与 C# 库进行通信。有时,异常会在 C# 端抛出,而我在 C++ 端得到的只是来自 COM 调用的 HRESULT,它表示“发生异常”(或类似的东西)。有什么方法可以让我获取完整的异常信息,以便我可以在我的 C++ 应用程序日志中打印一条信息性消息?如果没有,我可以在 C# 端做些什么来拦截所有异常,然后再触发任何机制将 HRESULT 返回到 C++,以便我可以在 C# 端记录它们?

【问题讨论】:

【参考方案1】:

有一个托管异常到 HRESULT 的映射。请参阅this MSDN article 中的表格。 .NET 使用 IErrorInfo 从 COM 对象检索错误信息。这也可能反过来起作用。值得一试。

【讨论】:

我在您提供的链接上的阅读给了我希望。您是否知道任何 ATL 类可以为我完成所有必要的接口查询,还是我必须自己做? ATL 实现了 IErrorInfo,你想反其道而行之。这是一个非常简单的界面。首先是 ISupportErrorInfo::InterfaceSupportsErrorInfo(),然后是 IErrorInfo::GetDescription()。 QI 获取接口指针。

以上是关于如何处理 C++ 加载的 C# DLL 中的异常的主要内容,如果未能解决你的问题,请参考以下文章

如何处理C#的HttpWebResponse的GetResponse中的超时异常

在使用 CreateObject 从 VBScript 中通过 COM 引用 C++ DLL 时,如何处理 DLL 版本?

如何处理混合模式项目中的打印?

DLL 如何处理来自多个进程的并发?

C++ 到 C# 移植问题:我将如何处理具有 double* 作为参数的方法?

C# HttpWebRequest.GetResponse - 如何处理非异常与 webexception 响应的 StatusCode 使用情况?