Как гибридные приложения VB6 / .Net работают в реальном мире?

11

Я поддерживаю приложение VB6, и мы изучаем, как перейти на .Net. Мы планируем сделать это постепенно, внедряя новые функции в видимые COM-классы .Net и медленно перенося существующие функции. Я нашел несколько поучительных примеров «Hello World» о том, как это сделать, и это прекрасно работает с нашим приложением. Но как реальное поведение этих гибридных приложений? Они стабильны, ремонтопригодны? Особенностью нашей программы является то, что больше пользователей на одном компьютере будут использовать ее, переключая учетные записи пользователей.

РЕДАКТИРОВАТЬ: приложение VB6 считывает данные из USB-подключения и сохраняет их в базе данных Access. Пользователь может вызывать различные представления данных. Данные кэшируются на аппаратном устройстве, поэтому перерывы при их чтении не являются фатальными.

РЕДАКТИРОВАТЬ 4 октября 2015 г .: время для последующих действий. Мы все еще находимся в процессе постепенной замены существующего кода VB6 на .Net. Сначала мы взяли на себя процедуры доступа к данным, затем бизнес-логику и в настоящее время одну форму за другой преобразуем в WPF. Мы действительно переписали каждый кусок кода, который мы преобразовали (в VB.Net), но мы могли делать это медленно и в то же время улучшать функциональность. Гибридное приложение пережило переход на Windows 8, 8.1 и 10.

РЕДАКТИРОВАТЬ 9 марта 2018 года: мы выпустим полностью преобразованный код в следующем месяце. Гибридное приложение будет поддерживаться как минимум год. Он показывает в основном проблемы на экранах с высоким разрешением, но в остальном работает нормально. Честно говоря, у нас больше проблем с поддержкой из-за поврежденных установок .Net Framework и поврежденных установок зависимостей (в том числе SQL Server LocalDb), чем проблем совместимости с базой кода VB6 ...

Dabblernl
источник
1
Что делает «устаревшее» приложение? некоторые подробности помогут ответить на ваш вопрос.
Темная ночь
Больше нет «USB-подключений», чем «PCI-подключений». Скорее всего, у вас есть какое-либо устройство, подключенное к шине USB, и тип устройства является важным моментом.
Bob77

Ответы:

5

Я имел удивительный успех, выставляя .NET VB6 через COM-интерфейсы. Сделав это, мы смогли сначала провести рефакторинг огромного количества кода VB6 и настроить путь обновления до .NET. Просто имейте в виду, что идиоматический VB6 не очень хорошо работает на C # или даже на VB.NET, так что вам нужно будет осторожно действовать.

Одна проблема, которая у нас была, довольно раздражающая, - это чрезмерное количество перестроений, которые нам пришлось сделать из-за изменений в публичном интерфейсе COM. Это было облегчено Visual Make .

ChaosPandion
источник
Спасибо. Не могли бы вы рассказать подробнее о проблеме, которую решает Visual Make. Я не уверен, что понимаю.
Dabblernl
@Dabblernl - Visual Make позволяет вам создать проект, который представляет собой набор проектов VB6, и будет строить их в правильном порядке.
ChaosPandion
6

FWIW, по моему опыту, необходимость обновить приложение VB6 до .Net обеспечивает идеальный повод для переписывания. Если только исходные кодеры не были блестящими провидцами, методы, преобладающие в VB6, редко переносятся на .Net.

Некоторые из прелестей, с которыми вы столкнетесь:

  1. Вы получите ссылки на Microsoft.VisualBasic, которые вам действительно не нужны.
  2. Они будут трудно найти ошибки, например, когда подстрока VB6 (a, b, c) тихо рендерится как a.SubString (b, c) и взрывается у вас на лице, потому что она была основана на 1 в VB6 и На основе 0 в .Net.
  3. Все эти простые в коде неявные преобразования получаются из дерева, обычно на первом ПК, у которого нет «,» в качестве разделителя списка и / или «.» в качестве десятичного разделителя.
  4. Ваши преобразованные классы не будут иметь желаемого сокрытия данных, которое должен принести редизайн.

НТН

smirkingman
источник
1
Вы поднимаете очень хорошие моменты. Это некоторые из причин, по которым необходимо сначала выполнить код для реорганизации плохих практик. В идеале вы должны убедиться, что Option Explicitон включен, и вся зависимость от неявных магических преобразований снята.
ChaosPandion
Спасибо, что подбодрил меня ;-) Но это не то, что я хочу знать. Настоящий конверсионный кошмар еще впереди.
Dabblernl
1
@chaos Правильно. На самом деле я начинаю с Explicit и, когда не осталось ошибок, я поднимаю его на Strict, который с пользой освещает множество проблем
smirkingman
1
Я слышал о командах, которые пошли после кода VB6 с огнеметами. Я полагаю, что причина, по которой это происходит гораздо больше для кода VB6, заключается в том, что у многих VB-разработчиков не было опыта программирования, когда они начинали. Это, в свою очередь, создало множество плохо разработанных и закодированных приложений в дикой природе для работы с этим поколением профессионалов.
Это Grunt
1

Он должен работать нормально для вас, в быстром переключении пользователей / нескольких сеансах нет ничего особенного, что могло бы вызвать у вас какие-либо проблемы.

С точки зрения удобства обслуживания, помните, что гибридный VB6 / VB.NET должен быть только временным решением: ваш план должен состоять в том, чтобы со временем полностью перейти на VB.NET.

Дин Хардинг
источник