c++ - 如何在不更改的情况下检索当前的 terminate() 处理程序?

标签 c++ visual-c++ error-handling terminate

问题来了。我的应用程序调用 CoCreateInstance() 来创建在第三方 DLL 中实现的 COM 对象。该 DLL 调用 set_terminate() 来更改 terminate() 处理程序,并在那里传递它自己的 terminate() 处理程序的地址。

初始的 terminate() 处理程序地址不被该库保存 - 它不关心并且只是更改处理程序并且从不恢复它。一旦 DLL 被卸载,它的代码就不再在进程内存中,因此如果现在调用 terminate(),程序就会遇到未定义的行为。

我想检索并存储初始 terminate() 处理程序的地址以便能够恢复它。我该怎么做?

最佳答案

标准 C++ 不提供内置方式。

当然,您可以只调用 terminate() 两次:第一次使用您拥有的任何虚拟处理程序(然后存储 terminate() 返回给您的处理程序);第二——恢复你刚刚存储的处理程序;)简单的技巧。

关于c++ - 如何在不更改的情况下检索当前的 terminate() 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200257/

相关文章:

php - CodeIgniter错误,显示核心文件路径而不是工作文件路径

sockets - websocket 关闭错误处理

c++ - LLVM IR : Identifying Variables with Metadata Nodes

c++ - fatal error 与非 fatal error 的区别

c++ - 为什么需要两个 EOF 作为输入?

c++ - 列表排序不正确

c++ - 使用专用模板时未定义的运算符错误

c# - 有时使用单个 try catch 而不是大量的 TryParsing 和其他错误处理不是更好吗?

c++ - 扭曲多边形(如 Photoshop 的扭曲)(透视变换)

c++ - 在同一解决方案中将控制台输出重定向到 MFC 屏幕输出