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

该库不保存初始terminate()处理程序地址-无关紧要,只需更改处理程序就不会恢复它。 DLL卸载后,其代码就不再位于进程内存中,因此,如果现在调用terminate(),程序将进入未定义的行为。

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

最佳答案

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

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

09-09 19:42
查看更多