c++ - 如何在非托管 C++ 中捕获托管异常(来自委托(delegate))?

标签 c++ .net exception delegates managed-c++

我使用非托管 C++ 通过 Marshal::GetFunctionPointerForDelegate 提供的函数指针调用托管委托(delegate)。该委托(delegate)有可能引发异常。我需要能够在我的非托管 C++ 中正确处理此异常,以确保诸如指针清理之类的事情,并可能将异常重新抛出到更多托管代码中。调用栈类似这样:

托管代码 -> 非托管 C++ -> 通过委托(delegate)回调托管代码(此处可以抛出异常)。

任何人都有正确处理这种情况的指示,以便可以清理非托管代码中的资源并将可用的异常抛出到启动整个调用堆栈的托管代码?

最佳答案

从托管代码中捕获

try
{
  throw gcnew InvalidOperationException();
}
catch(InvalidOperationException^ e)
{
  // Process e
  throw;
}

还有一个

[assembly:RuntimeCompatibility(WrapNonExceptionThrows = true)];

在您的程序集上捕获托管和非托管异常

关于c++ - 如何在非托管 C++ 中捕获托管异常(来自委托(delegate))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/183209/

相关文章:

c++ - 将第一个元素移动到队列的后面

c++ - R 内部 : extracting a function pointer from an SEXP object

c++ - 在 GNU Radio 中监控缓冲区

c# - 编译错误,.NET 没有看到存在的函数

c# - 识别时换行(数字+字符串)

Python 引发 NotADirectoryError

c++ 只读取最后一行文本文件的最快方法?

c# - Serilog 中的异常解构

android - Google Analytics tracker.enable Exception Reporting(true) 不在logcat中显示异常

sql - LINQ to SQL context.SubmitChanges - 如何获取错误详细信息?