2010-03-30 97 views
1

我有寫在Internet瀏覽器8在大多數情況下(大約90%)時的標籤或包含控制瀏覽器關閉運行的C++中的ActiveX控件,存在訪問衝突這樣的:調用OnDestroy()後ActiveX控件(COleControl)會發生什麼?

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. 

我的代碼沒有出現在堆棧跟蹤,雖然也許堆在執行過程中一些較早點損壞。

在調用OnDestroy()和控件的析構函數之間,ActiveX控件接收什麼生命週期事件?

回答

1

據我所知,ActiveX沒有嚴格的事件生命週期,它取決於主機端。例如,如果您的控件與某個AJAX框架一起使用,則可以在不調用析構函數的情況下調用OnDestroy()之後調用OnCreate()。因此,請確保您在OnDestroy()處理程序中沒有未初始化的操作。

您可以在ActiveX控件測試容器中加載控件並使用Activate/Deactivate進行遊戲,也許會有所幫助。

debugging tools for windows啓用應用程序驗證程序並確保您的調試程序downloads OS debug symbols。在這種情況下,堆棧跟蹤將提供更多信息。

+0

非常感謝您的回答。關閉瀏覽器的問題似乎與OnSetCursor()事件處理程序在控件在控件的生命週期中提前準備就緒之前被調用有關。 – richj 2010-03-31 22:01:34

相關問題