C# 捕获本机C++;C语言中的例外# 我有一些C++ C++类库,我已经在C++中包了起来,然后从C(三层)调用。 我可以从C++.NET中抛出异常,并在C++中愉快地捕捉它们。问题是,我唯一能捕捉到本机C++异常的方法是捕获Sturial.ExtExchange,这很好,但是在从STD::Exchange到Stult.我可以在C++ .NET层中捕获本地异常并将它作为.NET异常重新抛出,但这是一种侵入性的解决方案,它要求我在每个C++ .NET方法调用周围放置尝试catch块(以捕获本机异常和重新抛出)。
有没有其他解决方案来解决这个问题,或者我只需要把手弄脏…您需要把手弄脏,但是您可以通过创建一个预处理器宏来封装所有重复的捕获逻辑,从而大大减少工作量 我假设您希望捕获几种不同类型的异常,例如MFC CEException、std::exception以及SEH异常 您可能还想编写包装函数来返回HRESULT并使用SetErrorInfo(即转换为COM错误代码和错误信息)-您可能会认为这为.Net提供了一个更干净的接口,可以很好地将其转换为.Net异常。这将避免需要使用C++ .NET层,允许使用p/Unjk,并使其可以从VBA调用。p>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层,允许使
或者你可能不。。。只是指出选择 我不知道;I don’我想没有别的选择了。。因此,要么接受它,看看调用堆栈,它给出了抛出异常的本机代码中的行,要么对自定义异常使用包装器方法(这对我来说更有意义:为什么C#必须知道std::exception?)顺便说一句,您可能应该捕获ExternalException或SEHException,不例外你是如何捕捉C#中的异常的?我抓不到他们。我的C++ DLL是用MIW创建的,我不知道这会是问题。或者如果你使用C++ 11,你可以跳过宏,添加一个可以带LAMDAS的包装器函数。