Что происходит с элементом управления ActiveX (COleControl) после вызова OnDestroy ()?

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


person richj    schedule 30.03.2010    source источник


Ответы (1)


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

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

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

person Eugene    schedule 31.03.2010
comment
Большое спасибо за ваш ответ. Проблема с закрытием браузера, по-видимому, связана с обработчиком события OnSetCursor (), который вызывается до того, как элемент управления будет готов к нему на ранней стадии жизненного цикла элемента управления. - person richj; 01.04.2010