我使用非托管 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/