问题来了。我的应用程序调用 CoCreateInstance()
来创建在第三方 DLL 中实现的 COM 对象。该 DLL 调用 set_terminate()
来更改 terminate()
处理程序,并在那里传递它自己的 terminate()
处理程序的地址。
初始的 terminate()
处理程序地址不被该库保存 - 它不关心并且只是更改处理程序并且从不恢复它。一旦 DLL 被卸载,它的代码就不再在进程内存中,因此如果现在调用 terminate()
,程序就会遇到未定义的行为。
我想检索并存储初始 terminate()
处理程序的地址以便能够恢复它。我该怎么做?
最佳答案
标准 C++ 不提供内置方式。
当然,您可以只调用 terminate() 两次:第一次使用您拥有的任何虚拟处理程序(然后存储 terminate() 返回给您的处理程序);第二——恢复你刚刚存储的处理程序;)简单的技巧。
关于c++ - 如何在不更改的情况下检索当前的 terminate() 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200257/