如何在非托管C++中捕获托管异常(来自委托)
How do you catch a managed exception (from a delegate) in unmanaged C++?
我让非托管C++通过Marshal::GetFunctionPointerForDelegate提供的函数指针调用托管委托。此委托有可能引发异常。我需要能够在我的非托管C++中正确处理这个异常,以确保指针清理之类的事情,并可能将异常重新抛出到更多托管代码中。调用堆栈类似于此:
托管代码->非托管C++->通过委托回调托管代码(此处可以抛出异常)。
任何人都有正确处理这种情况的指针,以便清理非托管代码中的资源,并向启动整个调用堆栈的托管代码抛出可用的异常?
使用捕获托管代码
try
{
throw gcnew InvalidOperationException();
}
catch(InvalidOperationException^ e)
{
// Process e
throw;
}
和
[assembly:RuntimeCompatibility(WrapNonExceptionThrows = true)];
在程序集上捕获托管和非托管异常
甚至不要远程尝试让"非托管"代码意识到它必须处理.NET.
从回调中返回一个非零值,表示存在错误。提供一个描述错误的(线程本地)全局字符串对象,以便为用户检索有用的错误消息。
这可能涉及将您的委托封装到场景下的另一个函数中,该函数将捕获所有异常并返回错误代码。
一种方法是使用SEH,并在继续异常传播之前在异常过滤器中进行清理。但我不确定这是否过于合法,因为你会在过滤器中做很多工作。您对正在传播的托管异常也一无所知。
另一种选择是用您自己的托管函数包装托管委托,该函数捕获异常并引发非托管异常。。。然后可以在非托管代码中捕获。
当非托管代码完成清理后,使用另一个助手托管函数来重新抛出原始托管异常
http://msdn.microsoft.com/en-us/library/ms680657(v=VS.85).aspx
有人告诉我。。。{如果变量a和b没有在scope进程中声明,向量就无法显示。经过一番挖掘,发现循环漏洞如下所示--weibull_distribution>unmanaged_code
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 函数如何通知用户它基于函数原型抛出异常?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Pytorch torch.cholesky忽略异常