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

sha*_*oth 0 c++ error-handling terminate visual-c++

这是问题所在.我的应用程序调用CoCreateInstance()创建在第三方DLL中实现的COM对象.该DLL调用set_terminate()更改terminate()处理程序并在其中传递其自己的terminate()处理程序的地址.

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

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

Ale*_*tov 6

标准C++没有内置方式.

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