Почему не удается создать компонент COM + с кодом 0x8007007e. Указанный модуль не может быть найден?

У меня есть DLL-библиотека COM, которая отлично работает как внутрипроцессный сервер, и я устанавливаю ее в приложениях COM + служб компонентов. Теперь, когда я пытаюсь создать его из своего клиентского приложения, я получаю HRESULT 0x8007007e «Указанный модуль не может быть найден». Что может быть причиной этого?


person Dave Mooney    schedule 13.08.2009    source источник


Ответы (4)


Модуль не найден означает, что система COM попыталась загрузить модуль / dll (вероятно, на который указывает GUID), который не был найден, либо потому, что он не был зарегистрирован, либо потому, что dll отсутствовал по зарегистрированному пути.

Раньше я получал эту ошибку при попытке создать объект "A", например, из A.dll, который вызвал другую DLL (B.dll), которая не была зарегистрирована.

Инструмент, который может вас заинтересовать, - это монитор процесса, который сообщает вам какие именно ключи регистров искали для какого процесса, с кодами сбоя и успеха, и даже позволить вам увидеть его стек вызовов.

person xtofl    schedule 13.08.2009
comment
Я не знал этого .. :-) +1 - person yves Baumes; 14.08.2009
comment
Да, Process Monitor - отличная вещь. - person sharptooth; 14.08.2009
comment
ProcessMon не сильно помог, потому что COM + отказался от попыток загрузить dll до того, как в инструменте появился какой-либо ввод-вывод файлов. Я создавал свой компонент в динамическом представлении ClearCase, которое похоже на подключенный диск. Перемещение dll и psdll на локальный путь решило проблему. - person Dave Mooney; 14.08.2009

Пожалуйста, расскажите подробнее о различных обстоятельствах, когда вы работаете и не работаете.

Я подозреваю, что есть модуль, который зависит от того, что он не найден - например, некоторая dll, которой нет в пути поиска.

person Tim    schedule 13.08.2009
comment
Я подозреваю то же самое, но зависимости обнаруживаются, когда он загружается в процессе. Все находится в ПУТИ. - person Dave Mooney; 14.08.2009
comment
Опять же, в чем разница между двумя попытками казни. Вы ДУМАЕТЕ, что они все есть, но очевидно, что это не так. что есть в локальных путях рабочего исполнения, чего нет в отказавшем? - person Tim; 14.08.2009

Трудно сказать . Я помню, что обычно мне нужно зарегистрировать компонент com с чем-то вроде этого:

Regsvr32 my_com.dll

Также вы можете убедиться, что путь к вашей DLL находится в переменной envornnemnt PATH (это PATH или другая переменная?). Или скопируйте его в папку для своего приложения.

Также проверьте права вашего пользователя на эту DLL.

person yves Baumes    schedule 13.08.2009
comment
Компонент правильно зарегистрирован с помощью regsvr32, а его зависимости указаны в PATH, иначе он не может быть загружен в процессе. Я ошибся с идентификацией приложения COM +. Я получаю одну и ту же ошибку независимо от того, использую ли я LocalSystem или свою учетную запись домена. - person Dave Mooney; 14.08.2009

DLL была зарегистрирована в динамическом представлении ClearCase, аналогичном подключенному диску, недоступному для COM +. Решением было переместить dll и dll прокси / заглушку на локальный диск и зарегистрировать их там.

person Dave Mooney    schedule 14.08.2009