У меня непонятная проблема с элементом управления ActiveX, который я пишу - иногда кажется, что Internet Explorer не может правильно выгрузить элемент управления при завершении процесса. Это приводит к тому, что деструктор экземпляра элемента управления не вызывается.
Элемент управления написан на C ++, использует ATL и скомпилирован с использованием Visual Studio 2005. Деструктор экземпляра элемента управления всегда вызывается, когда пользователь просматривает страницу, в которую встроен элемент управления, - проблема возникает только при закрытом браузере. ,
Когда я запускаю IE под отладчиком, я не вижу ничего необычного - отладчик не улавливает никаких исключений, нарушений доступа или ошибок утверждений, но проблема все еще существует - я могу установить точку останова в деструкторе элемента управления и это никогда не ударится, когда я закрою броузер.
Кроме того, когда я загружаю простую HTML-страницу, которая встраивает несколько экземпляров элемента управления, я не вижу проблемы. Проблема возникает только тогда, когда создается экземпляр элемента управления из нашего веб-приложения, которое динамически вставляет теги в веб-страницу - конечно, не зная, в чем причина этой проблемы, я не знаю, является ли этот бит информации релевантным или нет, но, похоже, это указывает на то, что это может быть проблемой IE, поскольку она зависит от данных.
Когда я запускаю простой тестовый пример под отладчиком, я могу установить точку останова в деструкторе элемента управления, и он срабатывает каждый раз. Я полагаю, что это исключает проблему с самим элементом управления (скажем, ошибку, которая помешала бы когда-либо вызывать деструктор, например, утечка интерфейса).
Я проводил большую часть тестирования с IE 6, но я видел, что проблема возникает и в IE 7. Я не проверял IE 8.
Моя рабочая гипотеза сейчас заключается в том, что в динамическом HTML-коде есть что-то, из-за чего браузер пропускает интерфейс в элементе управления ActiveX. До сих пор мне не удавалось создать хороший тестовый пример, который бы воспроизводил его вне приложения, а приложение слишком велико, чтобы сделать хороший тестовый пример.
Я надеялся, что кто-то сможет предоставить информацию о возможных ошибках IE, которые, как известно, вызывают такое поведение. Кстати, ответ, приведенный ниже, является слишком общим - я ищу конкретный набор обстоятельств, которые, как известно, вызывают это. Конечно, кто-то там видел это раньше.