Запуск ActiveX DLL от VB6 под Windows 7 - PullRequest
5 голосов
/ 22 ноября 2010

Я добавляю некоторые функциональные возможности в старый инструмент администратора, написанный на VB6. Инструмент использует объект c ++ activeX. Я не работал над этим инструментом с тех пор, как обновился до Windows 7, и теперь активный X-объект не загружается с ошибкой 429 «ActiveX компонент не может создать объект». Я не разбираюсь в VB6, но я зарегистрировал ActiveX DLL и библиотеку типов, и я могу удалить и добавить объект из проекта через окно проекта-> ссылки (программа не компилируется, когда ссылка удаляется, как ожидалось). VB6 ide работает в режиме администратора, и я получаю ту же ошибку, если запускаю exe-файл напрямую как администратор.

Кто-нибудь еще сталкивался с подобной проблемой и нашел способ ее решить?

Спасибо, Patrick

PS: я также попытался поместить dll в рабочую директорию exe

РЕДАКТИРОВАТЬ: мне не повезло, пытаясь разобраться в этом, и в итоге получилось удаленное взаимодействие на сервере Windows 2003 для тестирования изменений.

Ответы [ 5 ]

2 голосов
/ 08 декабря 2010

Вы можете попробовать использовать regMon и FileMon Марка Руссиновича, чтобы увидеть, какие именно файлы или regkeys запрашиваются при загрузке этой dll. Это часто может сказать вам, если у вас отсутствует зависимость.

Также DEPENDS.EXE, который поставляется с VS6, иногда подходит для этого (хотя он не обязательно получает ВСЕ зависимости dll или exe).

0 голосов
/ 04 февраля 2013

Возможно, проблема также в вашем браузере. Пару недель назад я обновил свой IE, с тех пор мне пришлось вносить изменения, открывая IE, нажимая на инструменты, выбирая пользовательский, прокручивая до элементов управления ActiveX и включая, и / или нажимая на приглашение. То же самое было необходимо для сценариев и для меня, чтобы использовать XMLHttprequest. Теперь все возвращается к работе, однако всплывающее предупреждение предупреждения ActiveX иногда занимает более 2 минут, затем при нажатии все работает нормально.

0 голосов
/ 02 декабря 2010

COM собирается использовать реестр для сопоставления имени класса с физическим DLL-файлом, который должен быть загружен.

Проверьте ключи реестра, относящиеся к вашему COM-объекту ... сначала в HKEY_CLASSES_ROOT, затемимя класса, которое получает CLSID, затем раздел HKEY_CLASSES_ROOT / CLSID для GUID объекта, а затем посмотрите, где находится физическая библиотека.

0 голосов
/ 07 декабря 2010

429 может означать все виды разных вещей. Много раз это означает, что отсутствует зависимость, и самый простой способ выяснить, что отсутствует зависимость - это использовать procmon, чтобы увидеть, к каким файлам / настройкам реестра приложение пытается получить доступ, и, надеюсь, узнать, где вы получаете ACCESS_DENIED или FILE_NOT_FOUND или что там у вас.

0 голосов
/ 23 ноября 2010

UAC включен на этом компьютере? Вы пытались отключить его ? Я видел несколько случаев, когда это позволяло регистрировать элементы управления ActiveX, но не позволяло приложениям, использующим их, запускаться.

...