Visual Studio 6 не может загрузить COM DLL, скомпилированную в .net 2.0 - PullRequest
3 голосов
/ 18 ноября 2010

Я создал строго подписанную сборку в Visual Studio 2008 против .NET 3.5 framework (я также пробовал 2.0 framework). Я выставил класс как видимый COM, и я могу найти эту DLL в браузере объектов Visual Studio 6 для Visual Basic. Я могу создать exe-файл в VB6 и запустить его непосредственно из Windows Explorer, и все работает отлично. Однако, когда я пытаюсь запустить проект VB6 в Visual Studio 6, сборка .net не хочет загружаться и завершается со следующей ошибкой:

ActiveX component can't create object

Я также получаю эту ошибку вместо описанной выше, в зависимости от того, как я регистрирую dll:

-2147024894 File or assembly name (myComponentName), or one of its dependencies, was not found.

Или это:

-2146233082 Automation error

Я перепробовал все, что мог придумать. Похоже, это было бы проблемой с тем, как VS6 работает в режиме отладки. Может быть, среда отличается с отсутствующим путем к той или иной DLL. У меня есть эта проблема на двух разных машинах разработки. Я также могу сослаться на COM .net DLL, созданную другим разработчиком, использующим старую версию Visual Studio .net. Я даже открыл dll с помощью обходчика зависимостей и не получил никаких явных ошибок.

UPDATE: Монитор Proc говорит, что VB6 ищет мою dll в домашнем каталоге vb6 studio "C: \ Program Files \ Microsoft Visual Studio \ VB98 \ MyDLL.DLL" вместо того, где зарегистрирована DLL. Я поместил dll там и зарегистрировал его, теперь я получаю новую ошибку:

-2146234105 (80131107) "The format of the file 'MyDllName' is invalid."

Итак, почему студия ищет мою DLL там, а не там, где она зарегистрирована? Как я могу это исправить? Как минимум, как я могу заставить dll работать в папке "C: \ Program Files \ Microsoft Visual Studio \ VB98 \"

Окончательное обновление / РЕШЕНИЕ: Итак, я разобрался с проблемой. Это связано с тем, что VB6.exe заблокирован из используемой мной версии .net framework (2.0 или 3.5). Я нашел этот файл "C: \ Program Files \ Microsoft Visual Studio \ VB98 \ vb6.exe.config", который содержал следующую запись:

<configuration>
  <startup>
      <supportedRuntime version="v1.1.4322" />
  </startup>

Как только я удалил этот файл, dll начала нормально работать из среды Visual Studio 6. Спасибо всем, кто откликнулся на помощь.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

Хорошо, я понял проблему.Это связано с тем, что VB6.exe заблокирован из используемой мной версии .net framework (2.0 или 3.5).Я нашел этот файл "C: \ Program Files \ Microsoft Visual Studio \ VB98 \ vb6.exe.config", который содержал следующую запись:

<configuration>
  <startup>
      <supportedRuntime version="v1.1.4322" />
  </startup>

Как только я удалил этот файл, dll начала работать нормальноиз визуальной среды студии 6.Спасибо всем, кто откликнулся на помощь.

1 голос
/ 23 ноября 2010

Распространенной причиной 1-й ошибки является запуск Regasm.exe без параметра командной строки / codebase.

2-я ошибка: 0x8007002, ошибка Windows, «Файл не найден». Это может быть вызвано исключением в вашем управляемом коде.

3-я ошибка - 0x80131506, код управляемого исключения для «Ошибка механизма фатального выполнения». Это плохо, обычно из-за того, что неуправляемый код повреждает кучу мусора.

Очевидно, что у вас действительно нет проблем с регистрацией, вы получаете управляемые исключения. Но да, их сложно диагностировать, когда вы больше не видите красивые исключения .NET с их следами стека. Исправьте это с помощью отладчика. Project + Properties, вкладка Debug, выберите «Запустить внешнюю программу» и выберите вашу программу vb6. Установите точку останова в коде, который вы хотите проверить. Он появится, как только программа vb6 вызовет его. Чекбоксы Debug + Exception, Thrown - еще один хороший способ устранения управляемых исключений, отладчик останавливается на операторе throw. Хотя это может быть не ваш код, посмотрите на стек вызовов.

Вы даже можете выбрать vb6.exe из каталога установки VS6. Теперь вы можете отлаживать оба кода vb6 и управляемый код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...