Что происходит с элементом управления ActiveX (COleControl) после вызова OnDestroy ()? - PullRequest
1 голос
/ 30 марта 2010

У меня есть элемент управления ActiveX, написанный на C ++, который работает в 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 () и деструктором элемента управления?

1 Ответ

1 голос
/ 31 марта 2010

Как я понимаю, для ActiveX не существует строго жизненного цикла событий, это зависит от стороны хоста. Если ваш элемент управления используется с какой-то AJAX-инфраструктурой, например, после OnDestroy () можно вызывать OnCreate () без вызова деструктора. Поэтому убедитесь, что у вас нет инициализирующих действий внутри обработчика OnDestroy ().

Вы можете загрузить элемент управления в ActiveX Control Test Container и поиграть с активацией / деактивацией, возможно, это будет полезно.

Включите Application Verifier из инструментов отладки для Windows и убедитесь, что ваш отладчик загружает символы отладки ОС . В этом случае трассировка стека будет более информативной.

...