c # — DLL работает с tlbimp, но не regsvr32.exe

У меня есть .dll, которая была сделана с MFC в статической библиотеке (C ++). Я пытаюсь использовать его в универсальном приложении (C #). Мне не удалось сослаться на .dll в моем универсальном приложении, потому что я получил сообщение об ошибке: «Не удалось разрешить ссылку на COM. Импортер библиотеки типов обнаружил ошибку во время проверки типа».

Я пошел к решению здесь:
Импортер библиотеки типов обнаружил ошибку при проверке типа
И используйте tlbimp на моем .dll. Он успешно выдает новый .dll, но выдает предупреждение: «Импорт библиотеки типов в сборку, независимую от платформы. Это может вызвать ошибки, если библиотека типов не является действительно независимой»

ПРИМЕЧАНИЕ. Исходный файл .dll составляет 3000 КБ, а файл tlbimp .dll — всего 13 КБ. Я подозреваю, что теряю часть MFC и, вероятно, больше.

На новую .dll можно ссылаться из моего универсального приложения, и я могу использовать объекты и функции из него. Программа успешно компилируется, но когда я запускаю ее, я получаю ошибку времени выполнения:
«Создание экземпляра компонента COM с CLSID с использованием CoCreateInstanceFromApp не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован», когда я объявляю объект из .dll.

ПРИМЕЧАНИЕ. Вызов: IHdevice device = new Hdevice (); где IHdevice это интерфейс, а Hdevice это кокласс

Я подозревал, что библиотека tlb никогда не была зарегистрирована, поэтому я пытаюсь зарегистрироваться в regsvr32, но когда я это получаю, я получаю сообщение об ошибке:

«модуль Lib.dll был загружен, но точка входа DllRegisterServer не найдена»

Я точно знаю, что оригинальный .dll имеет функцию DllRegisterServer, а также определен в файле .def. Но я предполагаю, что это потеряно, когда я использую tlbimp. Есть ли способ зарегистрироваться и tlbimp одновременно? Есть ли другие предложения, которые вы можете предложить?

Заранее спасибо!

ОБНОВЛЕНИЕ: я попытался использовать regsvr32 на оригинальном .dll, и он говорит, что «модуль не удалось загрузить». я нашел
http://csi-windows.com/blog/all/73-windows-64-bit/378-fixing-qregsvr32-the-module-failed-to-load-the-specified-module-could-not-be- foundq
что похоже на ту же проблему, но я сделал все в решении. Я попытался положить DLL в SysWOW64, а затем пытался. Я попытался положить DLL в System32, а затем пытался. Я попытался переместить regsvr32 в тот же каталог и попытался. Каждый раз, когда он не может найти .dll.

Я вопрос: .dll должен быть COM видимым, чтобы это работало. Я нигде не верю, что я сделал .dll COM видимым, и я не могу, потому что мне нужно было бы иметь / clr, который несовместим со статическим MFC.

UPDATE2:
Я подумал, что, возможно, проблема связана с Universal Apps, поэтому я сделал консольное приложение и сделал тот же вызов. На этот раз ошибка: «Не удалось получить фабрику класса COM для компонента с CLSID из-за следующей ошибки: 8007007e Указанный модуль не найден».

НЕ ДЕЛАЙТЕ ЭТОГО: ГАНС ГОВОРИТ, ЧТО ЭТО УБИВАЕТ РЕГИСТРАЦИЮ!
Update3:
Я успешно использовал RegAsm на tlbimp .dll (и он говорит «типы зарегистрированы успешно»). Тем не менее, я все еще получаю ту же ошибку во время выполнения: создание экземпляра … не удалось из-за … Класс не зарегистрирован.

-1

Решение

.Dll зависел от других .dll, поэтому, когда он сказал, что модуль отсутствует, это действительно означало, что отсутствует другой модуль (тот, на который опирался мой .dll).

0

Другие решения


По вопросам рекламы [email protected]