我有一个用C ++编写的ActiveX控件,它在Internet Explorer 8中运行。大多数时候(大约90%)当包含控件的选项卡或浏览器关闭时,存在这样的访问冲突:
The thread 'Win32 Thread' (0x1bf0) has exited with code 0 (0x0).
Unhandled exception at 0x77b3b9fd in iexplore.exe: 0xC0000005: Access violation reading location 0x65007408.
在调用OnDestroy()之后但在调用控件的析构函数之前发生访问冲突。
调试输出显示:
No symbols are loaded for any call stack frame. The source code cannot be displayed.
我的代码中没有任何代码存在于堆栈跟踪中,尽管堆可能在执行期间的某个早期点被破坏。
ActiveX控件在调用OnDestroy()和控件的析构函数之间接收哪些生命周期事件?
答案 0 :(得分:1)
据我所知,ActiveX没有严格的事件生命周期,它取决于主机端。如果您的控件与某些AJAX框架一起使用,例如,在OnDestroy()之后可以调用OnCreate()而不调用析构函数。因此,请确保在OnDestroy()处理程序中没有未初始化的操作。
您可以在ActiveX控件测试容器中加载控件并使用激活/取消激活,这可能会有所帮助。
从debugging tools for windows启用应用验证程序,并确保您的调试程序downloads OS debug symbols。在这种情况下,堆栈跟踪将提供更多信息。