Попытка отладки из C # в VB6 приводит к TYPE_E_CANTLOADLIBRARY? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть библиотека VB6, доступ к которой осуществляется из некоторого кода C #.

Использование скомпилированной и зарегистрированной VB6 DLL не вызывает проблем. Но когда я загружаю источник VB6 в IDE VB6 и запускаю проект, следующий запуск кода C # завершится неудачно с ошибкой ниже.

Остановка работающей DLL в IDE VB6 снова позволит программе C # работать из скомпилированной DLL.

VB6 DLL скомпилирована с двоичной совместимостью.

Я получаю сообщение об ошибке в C #:

Произошло необработанное исключение типа 'System.InvalidCastException' в appname.exe Дополнительная информация:

Невозможно привести COM-объект типа 'dllname.classname Class ' к тип интерфейса 'имя_llll. _classname '.

Эта операция завершилась неудачно, потому что вызов QueryInterface на COM компонент для интерфейса с IID Ошибка {D8AB6D65-F5E7-4B9C-A039-67DDC630E5F7} из-за следующего ошибка:

Ошибка загрузки библиотеки типов / DLL. (Исключение из HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

В частности, эта ошибка возникает, когда код C # пытается получить доступ к любой части объекта взаимодействия, которая фактически исходит из базового COM-объекта. Но доступ к .NET Object -обработанным вещам вроде .ToString() отлично работает на этом объекте.

Почему я получаю эту ошибку?


* * +1032 Кроме того: * 1 033 *

Если я скомпилирую код C #, когда код VB6 НЕ запущен, он будет работать нормально. Но при компиляции, когда код VB6 работает, я получаю сообщение об ошибке:

BC30002 dllname.classname не определено.

Спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

Может быть, у кого-то еще будет более глубокое понимание, но это то, что я в конечном итоге выяснил:

  • Запуск Visual Studio (.NET) или Visual Basic 6 в качестве ADMIN при отладке в этом сценарии будетвызвать ошибку.Запуск ОБА как БЕЗ прав ADMIN тогда сработает.

Неприятность заключается в том, что права администратора необходимы для определенных операций сборки (в частности, для автоматической регистрации библиотек COM).Так что это была ловушка;в конечном счете мне пришлось многократно переключаться между настройками администратора / не-администратора для обоих инструментов, чтобы тестировать-модифицировать код ...


Примечание - когда я отлаживал в другом сценарии, где программаэто отладка VB6 EXE в коде C #, это никогда не было проблемой.Все может работать как администратор без проблем.

...