Всегда ли COMException 0x80040154 «Класс не зарегистрирован»? - PullRequest
5 голосов
/ 10 марта 2010

Всегда ли System.Runtime.InteropServices.COMException 0x80040154 означает, что класс не зарегистрирован? Я получаю исключение COMException, в котором говорится, что «получение фабрики классов COM для компонента с CLSID {29131539-2EED-1069-BF5D-00DD011186B7} не выполнено из-за следующей ошибки: 80040154». Он пытается загрузить файл Interop.Domino.dll, который является ссылкой, которую я получил на вкладке COM «Добавить ссылку» под названием «Объекты Lotus Domino», которая указывает на domobj.tlb в папке программы Notes.

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

Я снова вижу эту ошибку после переноса кода на сервер 2008 R2 (так что это x64). Он был написан на XP и работает на 2003 (оба x86). Чтобы диагностировать проблему, я построил коробку Win7 x86 (потому что нет R2 x86), и она работала. Я также создал коробку 2003 x64, и она дает сбой с той же ошибкой, поэтому похоже, что она вызвана переходом на архитектуру x64. Есть ли что-то, что я должен сделать при взаимодействии, чтобы заставить COM-библиотеки x86 работать на машинах x64?

Ответы [ 3 ]

4 голосов
/ 01 августа 2011

У меня возникла та же проблема при попытке создать и запустить приложение .NET в Windows 7 x64 с именем interop.domino.dll, которое является 32-разрядным.

Чтобы решить эту проблему, я перекомпилировал приложение .NET для запуска именно под x86 при работе на операционных системах x64.

Я использовал Visual Studio 2010 Express Edition, который более специфичен для платформ x86, чем платных версий.

Решение было:

  1. Нажмите ИНСТРУМЕНТЫ> ОПЦИИ> ПРОЕКТЫ И РЕШЕНИЯ
  2. Установите флажок «Показать расширенные конфигурации сборки» и нажмите «ОК»
  3. Нажмите ИНСТРУМЕНТЫ> НАСТРОЙКИ> проверьте НАСТРОЙКИ ЭКСПЕРТА, чтобы увидеть диспетчер конфигурации сборки
  4. Нажмите BUILD> КОНФИГУРАЦИОННЫЙ МЕНЕДЖЕР, выберите раскрывающийся список платформы до X86 и нажмите ЗАКРЫТЬ
  5. Теперь пересоберите проект
2 голосов
/ 10 сентября 2011

В техническом задании IBM указано, что COM-классы Domino не поддерживаются в 64-битной ОС. См. https://www -304.ibm.com / support / docview.wss? Uid = swg21454291 Так что даже при компиляции кода для запуска под x86 (согласно ответу mpownie) вы все еще рискнуть.

2 голосов
/ 10 марта 2010

Обратите внимание на регистр 32-битных компонентов, используя правильный регистр (C: \ Windows \ SysWOW64 \ regsvr32.exe).
Если вы уже зарегистрировались в 64-битной версии, отмените регистрацию каждого dll с той же версией.

Дополнительную помощь вы найдете здесь Команда переходит с XP32 на XP64 для разработки на .NET - Есть какие-нибудь ошибки?

Удачи

...