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

How to handle managed exception in unmanaged code

本文关键字:异常 非托管代码 何处理 处理      更新时间:2023-10-16

我有一个基于COM的c++项目,在这个项目中我访问c#程序集。我想写的代码来处理异常在com项目,这是由c#汇编抛出的。

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

请对此提供指导。

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

接下来,CLR实现IErrorInfo接口。您可以QI用于调用托管方法以获取IErrorInfo接口指针的接口指针。IErrorInfo::GetDescription()返回异常。消息属性值。

这就是它结束的地方,没有办法得到神圣的堆栈跟踪