sha*_*oth 0 c++ error-handling terminate visual-c++
这是问题所在.我的应用程序调用CoCreateInstance()
创建在第三方DLL中实现的COM对象.该DLL调用set_terminate()
更改terminate()
处理程序并在其中传递其自己的terminate()
处理程序的地址.
初始terminate()
处理程序地址不会被该库保存 - 它不关心并只是更改处理程序而永远不会恢复它.一旦DLL被卸载,其代码就不再在进程内存中,因此如果现在terminate()
被调用,程序将运行到未定义的行为.
我想检索并存储初始terminate()
处理程序的地址,以便能够恢复它.我该怎么做?
标准C++没有内置方式.
当然你可以调用terminate()两次:第一次使用你拥有的任何虚拟处理程序(然后存储terminate()返回给你的处理程序); 第二 - 恢复你刚刚存储的处理程序;)简单的技巧.