【发布时间】:2011-01-13 02:28:39
【问题描述】:
这就是问题所在。我的应用程序调用CoCreateInstance() 来创建一个在第三方DLL 中实现的COM 对象。该 DLL 调用 set_terminate() 来更改 terminate() 处理程序并在那里传递它自己的 terminate() 处理程序的地址。
初始的terminate() 处理程序地址没有被那个库保存——它不关心,只是简单地改变处理程序并且从不恢复它。一旦 DLL 被卸载,它的代码就不再在进程内存中,所以如果现在调用 terminate(),程序会运行到未定义的行为。
我想检索并存储初始terminate() 处理程序的地址,以便能够恢复它。我该怎么做?
【问题讨论】:
-
您能否提及那个 DLL 是什么,以便其他人也可以得到警告?
-
@Rob Kennedy:它是特定于域的,因此任何人 1. 使用它和 2. 实际受到所描述行为打击的机会都可以忽略不计。另外,我们现在正试图说服供应商的支持他们应该修复它。
标签: c++ visual-c++ error-handling terminate