如何在非托管代码中处理托管异常

时间:2014-05-21 09:17:03

标签: c++ c#-4.0 com unmanaged managed

我有基于COM的C ++项目,在其中访问C#程序集。我想编写代码来处理由C#assembly抛出的com项目中的异常。

我尝试放置try和catch块,但是没有抛出异常,而是HRESULT值小于零。我需要显示C#API抛出的确切消息字符串。

请提供相关指南。

1 个答案:

答案 0 :(得分:1)

您有两种可用信息来源。首先,返回的HRESULT不是任意的,每个托管异常都有distinctive HRESULT,可以帮助您识别抛出的异常对象的类型。

接下来,CLR实现IErrorInfo interface。您可以在用于调用托管方法的接口指针上获取QI以获取IErrorInfo接口指针。 IErrorInfo :: GetDescription()返回Exception.Message属性值。

它结束的地方,无法获得圣堆痕迹。