IE9 RC аварийно завершает работу при вызове IDispatch:: Invoke


У меня есть рабочий код, который работает на IE6,7,8 & 9 Beta но падает на IE9 RC. Я вижу, что веб-страница успешно использует интерфейс ActiveX, но когда я пытаюсь вызвать IDispatch:: Invoke из ActiveX, ActiveX аварийно завершает работу.

Мое приложение построено из CHtmlView (IE container) веб-страницы (GUI) и ActiveX (само приложение), я вижу, что веб-страница успешно использует интерфейс ActiveX, но когда я пытаюсь отправить данные обратно на веб-страницу Я падаю.

После отладки кода (vs2005 c++) я обнаружил, что все функции IDispatch вызывают сбой, но это поведение воспроизводится только с версией RC, наш продукт уже работает около 3 лет без проблем, и теперь каждый клиент, обновляющийся до RC, больше не может использовать наш продукт.

Были ли какие-либо изменения, которые могут вызвать такое поведение? по документам в Интернете я ничего не нашел. Спасибо.

2 2

2 ответа:

IE9RC ввел фильтрацию ActiveX:

Internet Explorer 9 RC позволяет блокировать элементы ActiveX для всех сайты, а затем снова включите их только для тех сайтов, которым Вы доверяете новый параметр фильтрации ActiveX.

После утомительной борьбы я нашел ответ (2 года назад). Тогда я закрыл вопросы на форуме IE9, но забыл закрыть эту тему.

Спасибо @ Paul Sweat за напоминание.

Наша структура работала следующим образом:

    Activex и web имели набор известных строк, таких как:" onStart"," onPause " и т. д...
  1. веб зарегистрирует эту функцию в движке.
  2. activex вызовет обратный вызов при необходимости

Во-вторых, проблема заключалась в том, что в старых версиях IE функция JavaScript eval создавала объекты IDispatch, и вы могли передавать объекты в activex.

В IE9 наряду со многими другими изменениями это тоже изменилось, и eval вернет что-то еще.

Давка произойдет, когда activex попытается выполнить обратный вызов. Это было... Очень трудно отладить.