Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在非托管代码中处理托管异常 我有C++项目,它是基于COM的,其中AM访问C汇编程序。我想编写代码来处理com项目中由C#assembly引发的异常_C++_C# 4.0_Com_Unmanaged_Managed - Fatal编程技术网

如何在非托管代码中处理托管异常 我有C++项目,它是基于COM的,其中AM访问C汇编程序。我想编写代码来处理com项目中由C#assembly引发的异常

如何在非托管代码中处理托管异常 我有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属性值 这就是它结束的地方,无法获得神圣堆

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


请提供这方面的指导方针

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

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


这就是它结束的地方,无法获得神圣堆栈跟踪。

如果您只想知道错误消息,可以将最后一条异常消息保存在变量中,然后使用GetLastErrorMsg()方法公开它。当您获得的HRESULT值小于零时调用该方法。我认为您无法从非托管世界访问托管信息(异常字符串)。请查看以下内容:。它说:“……您将无法在本机处理程序中获取托管异常信息—您必须在C++/CLI中使用try/catch—也就是说,在托管上下文中—如果您确实需要该信息。”。但是你可以抓住它。我没有找到GetLastErrorMsg()。。。我可以看到GetLastError()返回DWORD。