1

我有一个用 C++ 编写的在 Internet Explorer 8 中运行的 ActiveX 控件。大多数时候(大约 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() 和控件的析构函数之间接收哪些生命周期事件?

4

1 回答 1

1

据我了解,ActiveX 没有严格的事件生命周期,它取决于主机端。如果您的控件与某些 AJAX 框架一起使用,例如,在 OnDestroy() 之后可以调用 OnCreate() 而无需调用析构函数。因此,请确保您在 OnDestroy() 处理程序中没有取消初始化操作。

您可以在 ActiveX 控件测试容器中加载控件并使用激活/停用进行操作,也许会有所帮助。

从Windows 调试工具中启用应用程序验证程序,并确保您的调试器下载 OS 调试符号。在这种情况下,堆栈跟踪将提供更多信息。

于 2010-03-31T03:41:21.240 回答