Исключение COM - TYPE_E_CANTLOADLIBRARY? - PullRequest
4 голосов
/ 18 апреля 2011

Я использую COM DLL в моем веб-приложении .Net.Это отлично работает на нескольких разных машинах.
Однако на одной конкретной машине я получаю следующую ошибку:

Невозможно привести объект COM типа 'CServer.CApplicationClass' к типу интерфейса 'CServer.ICApplication'.Эта операция завершилась неудачно, поскольку произошел сбой вызова QueryInterface COM-компонента для интерфейса с IID '{CF0DFA28-046B-4C7D-8AA9-F4B7477D8CAE}' из-за следующей ошибки: Ошибка загрузки библиотеки типов / DLL.(Исключение из HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

Я зарегистрировал dll с помощью команды regsvr32.
Я также создал приложение COM + для этой dll.Запустив поиск по реестру
Я могу найти ключ в многочисленных местах.Я также попытался отменить регистрацию dll и удалить все ссылки на компьютере к этой dll.И после этого заново добавляем dll и перерегистрируем его.

Я написал простой файл сценария Windows, который проверяет DLL.Это отлично работает.Однако проблема существует в моем проекте .net, который выполняется в iis.

Может кто-нибудь помочь мне с этим? ..

Если вам нужна дополнительная информация, пожалуйста, оставьте комментарий.Спасибо.

Ответы [ 3 ]

2 голосов
/ 08 июля 2014

У меня была похожая проблема с сообщением "TYPE_E_CANTLOADLIBRARY".

Справочная информация: У меня был проект, который использовал Interop.ReferenceA.dll. Этот файл был создан с помощью tlbimp ReferenceA.dll / out: Interop.ReferenceA.dll.

Решение: Когда я взглянул на ReferenceA.dll с помощью RegDllView, я заметил, что у ReferenceA.dll есть подкласс, который представляет собой IID, показанный в сообщении об ошибке. Я посмотрел в исходном коде подкласса и заметил, что у него есть зависимость от Interop.ReferenceB.dll.

Оказывается, для работы подкласса необходим Interop.ReferenceB в качестве библиотеки типов. Итак, я запустил это:

regasm /tlb:Interop.ReferenceB.tlb Interop.ReferenceB.dll (использовалась 32-разрядная версия regasm.)

И ошибка ушла.

0 голосов
/ 10 декабря 2013

У меня была похожая проблема. Сначала был получен отказ в доступе, который после некоторых осмотров был решен, но только после этого сообщения об ошибке (TYPE_E_CANTLOADLIBRARY). Имейте в виду, что на Windows 7 запущен компонент COM +.

После некоторых бесполезных попыток, связанных с перепиской с реестром, мы с коллегой по работе нашли способ его запустить и запустить:

1) Отменить регистрацию вашей dll (regsvr32 -u dllname)

2) убедитесь, что ваши ссылки на DLL удалены из реестра (резервное копирование в первую очередь)

3) Создать пустое приложение com + (серверное приложение) в Службах компонентов

4) Скопировать идентификатор приложения в буфер обмена

5) перейдите в «c: \ program files (x86) \ Complus Applications» и создайте папку с идентификатором в буфере обмена

6) скопируйте свою dll в эту папку и зарегистрируйте ее

7) Вернитесь в Службы компонентов и добавьте компонент в приложение, которое вы создали, используя dll на «c: \ program files (x86) \ Complus apps {* app id *}» *

, который сделал это для меня. Надеюсь, это поможет.

0 голосов
/ 18 апреля 2011

Убедитесь, что ваш AppPool установлен на x86.Также убедитесь, что ваша сборка ориентирована только на x86.

...