Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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# 捕获本机C++;C语言中的例外# 我有一些C++ C++类库,我已经在C++中包了起来,然后从C(三层)调用。 我可以从C++.NET中抛出异常,并在C++中愉快地捕捉它们。问题是,我唯一能捕捉到本机C++异常的方法是捕获Sturial.ExtExchange,这很好,但是在从STD::Exchange到Stult.我可以在C++ .NET层中捕获本地异常并将它作为.NET异常重新抛出,但这是一种侵入性的解决方案,它要求我在每个C++ .NET方法调用周围放置尝试catch块(以捕获本机异常和重新抛出)。_C#_C++_.net_Exception - Fatal编程技术网

C# 捕获本机C++;C语言中的例外# 我有一些C++ C++类库,我已经在C++中包了起来,然后从C(三层)调用。 我可以从C++.NET中抛出异常,并在C++中愉快地捕捉它们。问题是,我唯一能捕捉到本机C++异常的方法是捕获Sturial.ExtExchange,这很好,但是在从STD::Exchange到Stult.我可以在C++ .NET层中捕获本地异常并将它作为.NET异常重新抛出,但这是一种侵入性的解决方案,它要求我在每个C++ .NET方法调用周围放置尝试catch块(以捕获本机异常和重新抛出)。

C# 捕获本机C++;C语言中的例外# 我有一些C++ C++类库,我已经在C++中包了起来,然后从C(三层)调用。 我可以从C++.NET中抛出异常,并在C++中愉快地捕捉它们。问题是,我唯一能捕捉到本机C++异常的方法是捕获Sturial.ExtExchange,这很好,但是在从STD::Exchange到Stult.我可以在C++ .NET层中捕获本地异常并将它作为.NET异常重新抛出,但这是一种侵入性的解决方案,它要求我在每个C++ .NET方法调用周围放置尝试catch块(以捕获本机异常和重新抛出)。,c#,c++,.net,exception,C#,C++,.net,Exception,有没有其他解决方案来解决这个问题,或者我只需要把手弄脏…您需要把手弄脏,但是您可以通过创建一个预处理器宏来封装所有重复的捕获逻辑,从而大大减少工作量 我假设您希望捕获几种不同类型的异常,例如MFC CEException、std::exception以及SEH异常 您可能还想编写包装函数来返回HRESULT并使用SetErrorInfo(即转换为COM错误代码和错误信息)-您可能会认为这为.Net提供了一个更干净的接口,可以很好地将其转换为.Net异常。这将避免需要使用C++ .NET层,允许使

有没有其他解决方案来解决这个问题,或者我只需要把手弄脏…

您需要把手弄脏,但是您可以通过创建一个预处理器宏来封装所有重复的捕获逻辑,从而大大减少工作量

我假设您希望捕获几种不同类型的异常,例如MFC CEException、std::exception以及SEH异常

您可能还想编写包装函数来返回HRESULT并使用SetErrorInfo(即转换为COM错误代码和错误信息)-您可能会认为这为.Net提供了一个更干净的接口,可以很好地将其转换为.Net异常。这将避免需要使用C++ .NET层,允许使用p/Unjk,并使其可以从VBA调用。p>
或者你可能不。。。只是指出选择

我不知道;I don’我想没有别的选择了。。因此,要么接受它,看看调用堆栈,它给出了抛出异常的本机代码中的行,要么对自定义异常使用包装器方法(这对我来说更有意义:为什么C#必须知道std::exception?)顺便说一句,您可能应该捕获ExternalException或SEHException,不例外你是如何捕捉C#中的异常的?我抓不到他们。我的C++ DLL是用MIW创建的,我不知道这会是问题。或者如果你使用C++ 11,你可以跳过宏,添加一个可以带LAMDAS的包装器函数。