VB6 App +. Net компонент работает как скомпилированное приложение, но не в VB6 IDE - PullRequest
4 голосов
/ 18 мая 2010

У меня есть приложение VB6, которое использует компонент .Net (через ссылку .tlb в приложении VB6), которое работает нормально при выполнении в виде скомпилированного приложения, но выдает ошибку из IDE VB6 в определенный момент, когда оно пытается использовать компонент .NET.

Следует отметить, что ошибка возникает, когда компонент .NET предназначен для вызова стороннего компонента отчетности. Ошибка относится к компоненту отчетности. Кое-что о невозможности привести из String к другому типу.

.tlb находится в том же месте, что и исполняемый файл приложения, поэтому я не понимаю, почему должна быть проблема. Для одной из библиотек DLL есть файл .config, но он только указывает, где должен находиться файл журнала.

Мне нужно, чтобы приложение работало в IDE для отладки и пошагового выполнения кода. В чем может быть проблема? Может ли IDE VB6 искать в другом месте определенные библиотеки DLL? * +1007 *

Ответы [ 7 ]

4 голосов
/ 02 июня 2010

Это может быть связано с несовпадением версии во время выполнения. Попробуйте следующее:

Создайте файл .config для IDE (например, имя EXE исполняемого файла IDE + .config).

Вставьте в него следующее:

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
    <requiredRuntime version="v2.0.50727" safemode="true"/>
  </startup>
</configuration>

Это обеспечит загрузку среды выполнения .NET 2 независимо от того, в каком порядке активированы COM-компоненты .NET (некоторые из которых могут быть загружены средой IDE, что может привести к несовпадению времени выполнения в процессе).

3 голосов
/ 06 июня 2010

Исключение приведения не легко объясняется проблемой с каталогом программы по умолчанию. Это все, что должно отличаться при запуске приложения из среды IDE VB6, а не напрямую.

Вам придется использовать отладчик, чтобы узнать, что происходит не так. К счастью, это легко, когда вы используете VB6. Начните с открытия вашего .NET проекта в Visual Studio. Проект + Свойства, вкладка Отладка. Выберите «Запустить внешнюю программу», нажмите кнопку с точками и перейдите к vb6.exe. Он должен находиться в каталоге c: \ program files \ microsoft visual studio \ vb98 \ vb6.exe, если вы использовали параметры установки по умолчанию.

Можно установить для параметра «Параметры командной строки» путь к вашему проекту .vbp, чтобы среда IDE автоматически загружала его. Не обязательно.

Отладка + Исключения, установите флажок «Исключение общего времени выполнения». Нажмите F5, чтобы запустить отладчик. Теперь откроется среда VB6, при необходимости загрузите проект VB6. Запустите проект и воссоздайте случай сбоя. Это должно вызвать точку останова в отладчике Visual Studio. Возможно, вам придется переключиться на него вручную, кнопка на панели задач должна мигать. Используйте обычные средства отладки, чтобы выяснить, почему возникло исключение.

Обратите внимание, что вы также можете установить точки останова в Visual Studio, что полезно, если вам нужно пошагово пройти по коду, чтобы выяснить, в чем дело. Когда вы нажимаете F5, индикатор точки останова становится пустым, так как DLL еще не загружена. Как только ваш проект VB6 создаст объект класса из вашего кода .NET, DLL будет загружена (отображается в окне «Вывод»), и индикатор точки останова загорится. Если этого не произойдет, вам может потребоваться запустить Regasm.exe с параметром / codebase, чтобы библиотека DLL в папке bin \ Debug проекта была зарегистрирована как COM-сервер.

3 голосов
/ 04 июня 2010

Как и в случае с Lucero, меня интересует файл конфигурации ... Недавно у меня был сценарий взаимодействия, в котором мне нужно было создать файл конфигурации для исполняемого файла vb6, чтобы получить .net dll для правильного чтения настроек в домене приложения в который .net библиотека работает. В этом случае я смог взять существующий конфиг для dll и скопировать его как vb6 .exe.config, где vb6 - имя вашего исполняемого файла vb6.

Если эта мысль идет в правильном направлении, я бы согласился с Lucero, что ваш файл * .exe.config должен быть связан с исполняемым файлом-источником для IDE ... который, я считаю, vb6.exe.

Хотя сам по себе исполняемый файл vb6 не требует файла .config для работы, наличие файла конфигурации повлияет на все загружаемые компоненты .net, поэтому это может иметь значение.

Вы можете исключить файл конфигурации, временно жестко запрограммировав свои настройки. Если это работает в VB6 IDE, то вы знаете, что движетесь в правильном направлении.

2 голосов
/ 06 июня 2010

Майк Л. сказал это, но мой ответ здесь описывает все проблемы, связанные с файлами VB6 и exe.config, и я считаю, что здесь проблема.

1 голос
/ 06 июня 2010

Вы можете попробовать следующее. Это может быть обходной путь, или вы сможете выяснить, в чем именно заключается проблема:

  • загрузка .NET DLL в Visual Studio
  • в свойствах проекта на вкладке «Отладка» установите для параметра «Пуск» значение «Запуск внешней программы» и укажите для него «C: \ Program Files \ Microsoft Visual Studio \ VB98 \ VB6.EXE»
  • F5, теперь запускается vb6
  • загрузить ваш проект VB6 в отладчик VB6
  • отлаживать.
1 голос
/ 05 июня 2010

Я бы попытался зарегистрировать компонент .net, используя regasm с ключом / codebase. Инструмент выдаст вам предупреждение, если сборка не находится в GAC, но вы можете проигнорировать это предупреждение, если у вас нет нескольких разных версий сборки на одном компьютере.

0 голосов
/ 18 марта 2014

У меня была такая же проблема (унаследованное приложение VB6, использующее некоторые библиотеки на основе .NET через ActiveX COM). Чтобы заставить это работать, мне нужно было сделать следующее (возможно, можно пропустить некоторые из следующих, но я знаю, что каждый требовался в тот или иной момент):

  1. Скопируйте файлы DLL и TLB в папку, в которой находится EXE-файл VB6 IDE (например, C: \ Program Files (x86) \ Microsoft Visual Studio \ VB98). Грязный и раздражающий, но я не нашел альтернативы.
  2. Добавьте подходящий файл VB6.exe.config (как описано выше).
  3. Вам также могут понадобиться файлы .config для самих DLL (например, если .NET DLL называется abc.dll, файл конфигурации будет abc.dll.config). Кажется, некоторые вещи будут считаны из файла конфигурации VB6, а другие - из файла конфигурации DLL. Вероятно, можно выяснить, что происходит откуда, но проще всего сделать два файла конфигурации одинаковыми.
  4. Убедитесь, что вы применили VB6 SP6.
  5. Запустите IDE VB6 от имени администратора.
  6. Запустите IDE VB6 в режиме совместимости с XP SP3.

Это что-то вроде дробовика, но, используя вышеописанное, я все еще могу использовать IDE VB6 в 64-битной Windows 8.1 и отлаживать код VB6 (и даже COM-компоненты .NET, подключая IDE Visual Studio).

...