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

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

【问题讨论】:

    标签: c# c++ com exception-handling


    【解决方案1】:

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

    【讨论】:

    • 我在您提供的链接上的阅读给了我希望。您是否知道任何 ATL 类可以为我完成所有必要的接口查询,还是我必须自己做?
    • ATL 实现了 IErrorInfo,你想反其道而行之。这是一个非常简单的界面。首先是 ISupportErrorInfo::InterfaceSupportsErrorInfo(),然后是 IErrorInfo::GetDescription()。 QI 获取接口指针。
    猜你喜欢
    • 2012-12-03
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多