如何在非托管代码中处理托管异常 我有C++项目,它是基于COM的,其中AM访问C汇编程序。我想编写代码来处理com项目中由C#assembly引发的异常
我尝试放置try和catch块,但是没有抛出异常,而是HRESULT值小于零。我需要显示C#API抛出的确切消息字符串如何在非托管代码中处理托管异常 我有C++项目,它是基于COM的,其中AM访问C汇编程序。我想编写代码来处理com项目中由C#assembly引发的异常,c++,c#-4.0,com,unmanaged,managed,C++,C# 4.0,Com,Unmanaged,Managed,我尝试放置try和catch块,但是没有抛出异常,而是HRESULT值小于零。我需要显示C#API抛出的确切消息字符串 请提供这方面的指导方针 您有两个可用的信息来源。首先,返回的HRESULT不是任意的,每个托管异常都有一个可帮助您识别抛出的异常对象的类型 接下来,CLR实现。您可以对用于调用托管方法的接口指针进行QI操作,以获取IErrorInfo接口指针。IErrorInfo::GetDescription()返回Exception.Message属性值 这就是它结束的地方,无法获得神圣堆
请提供这方面的指导方针 您有两个可用的信息来源。首先,返回的HRESULT不是任意的,每个托管异常都有一个可帮助您识别抛出的异常对象的类型 接下来,CLR实现。您可以对用于调用托管方法的接口指针进行QI操作,以获取IErrorInfo接口指针。IErrorInfo::GetDescription()返回Exception.Message属性值
这就是它结束的地方,无法获得神圣堆栈跟踪。如果您只想知道错误消息,可以将最后一条异常消息保存在变量中,然后使用GetLastErrorMsg()方法公开它。当您获得的HRESULT值小于零时调用该方法。我认为您无法从非托管世界访问托管信息(异常字符串)。请查看以下内容:。它说:“……您将无法在本机处理程序中获取托管异常信息—您必须在C++/CLI中使用try/catch—也就是说,在托管上下文中—如果您确实需要该信息。”。但是你可以抓住它。我没有找到GetLastErrorMsg()。。。我可以看到GetLastError()返回DWORD。