Моя программа является DLL, которая подключается к работающему экземпляру IE. Это работало хорошо в течение многих лет.
Недавно я отряхнул его и запустил, но последняя строка ниже не hr = 0x80040154
:
#import <mshtml.tlb> rename("value", "theValue") rename("event", "theEvent")
#import <shdocvw.dll>
// ....
SHDocVw::IShellWindowsPtr spSHWinds;
HRESULT hr = m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
Может ли это иметь значение, что IE7 был заменен IE8? Где еще мне посмотреть?
Я использую VS2008, если это имеет значение.
Отредактировано, чтобы добавить
Я не вижу, что это может быть проблема 32/64 бит — в прошлом году она работала нормально на этой же машине. Единственное, что изменилось (насколько я заметил), это версия IE, с 7 до 8.
Примечание для охотников за головами:
У меня есть доступ к этой системе только в течение нескольких часов в день (около 0:00 EST), поэтому вы можете не получить быстрых ответов на ваши предложения, но я будут посмотри на них.
Если вы думаете, что есть вещи, которые я должен проверять (например, значения реестра), будьте конкретны.
Отредактировано, чтобы добавить:
Теперь я вижу, что первый Когда я вызываю CreateInstance, он возвращает 0x80070002, а не 0x80040154.
Это будет очень трудно диагностировать. ShellWindows coclass является особенным, его ключ реестра CLSID HKEY_CLASSES_ROOT\CLSID\{9BA05972-F6A8-11CF-A442-00A0C90A8F39}
, Когда вы посмотрите туда, вы не увидите ничего полезного зарегистрированного там. Исходная история заключается в том, что это пережиток неудачной попытки сделать оболочку Windows похожей на веб-браузер. Все еще видимый сегодня, перечисление окон оболочки возвращает экземпляры Windows Explorer и Internet Explorer.
Утилита SysInternals ProcMon почти всегда является предпочтительным оружием для отладки ошибок 0x80040154, но здесь она не работает. Вы можете видеть, как он проверяет реестр и не находит то, что ищет, но тогда программа знает, как загрузить ieframe.dll. Это может работать только операционной системой, перехватывающей вызов CoCreateInstance (). Что в общем имеет смысл, учитывая, что в Coclass перечисляются оболочки Windows.
Все, что у вас осталось, это метод проб и ошибок. Сначала переустановите IE, затем ОС. Или вытолкнуть машину из окна 4-го этажа, пока она не съела слишком много вашего драгоценного времени.
Других решений пока нет …