VB6 на С#
Конвертер VB6 -> C# 2017 на базе VB6.
Использование
Бесплатное использование. Свободен для форка. Бесплатно внести свой вклад. Бесплатно спрашивать. Бесплатная продажа. Свободно продавать под своим именем... Свободно делать практически все, кроме заявления «Я не могу» (см. ЛИЦЕНЗИЮ).
См. ниже основную информацию. См. Wiki для получения более подробной информации. Смело обращайтесь за поддержкой.
Быстрый старт
- Откройте файл
prj.vbp
, запустите программу (требуется VB6 IDE). - Введите некоторые значения конфигурации в форму
Config
с помощью кнопки. - Теперь, когда вы выбрали свой проект, нажмите кнопку
SCAN
. Это помогает конвертеру понять разницу между методами без круглых скобок и переменными/константами. Он также создает полный список импорта (который можно очистить в VS 2019 IDE через ^K^E). - Если хотите, нажмите
SUPPORT
, чтобы создать базовую структуру поддержки проекта.- В качестве альтернативы файлы
VBExtension.cs
и VBConstants.cs
можно скопировать непосредственно из корня проекта и включить в другое место.
- Затем введите имя файла и нажмите
Single File
чтобы попытаться преобразовать файл, который вы вводите рядом с ним.
Если вы хотите преобразовать весь проект, просто нажмите ALL
, и он сразу же выполнит сканирование, создание поддержки и преобразование всего проекта.
ПРИМЕЧАНИЕ. Возможно, это не самый быстрый способ, он все равно требует ручных усилий, но это быстрее, чем делать ВСЕ вручную!
Обновления 01.12.2021
Исходная версия конвертера решала проблему поблочно, разделяя каждую логическую программную единицу на отдельную строку и преобразуя ее самостоятельно. В результате преобразователь сделал несколько проходов и работал очень медленно. После обновления линтера, чтобы он не использовал этот подход, а просто прогонял код сверху вниз, стало очевидно, что конвертер может делать то же самое с такой же точностью.
Итак, сегодня выпущена версия конвертера v2, а также версия v1, с помощью переключателей в главной форме. Не стесняйтесь смешивать и комбинировать, конвертировать весь проект одним, а затем отдельные файлы — другим. Будем надеяться, что из двух совершенно разных подходов один из двух сработает лучше, чем другой, и потребует меньше работы. Опять же, у них обоих конверсия всего лишь 80-90%. Есть много вещей, которые вам придется сделать вручную и перепроверить (например, границы цикла), но опять же, это наверняка лучше, чем замена всех символов &
в коде VB6 на +
для C#.
Как мне...?
По поводу конверсии возникает много вопросов. Если вы просто хотите узнать, как этот конвертер обрабатывает конкретные шаблоны, см. раздел Как мне...? страница в нашей вики.
Независимо от того, используете ли вы этот конвертер или нет, мы предлагаем решение часто встречающихся задач конвертации. Наши решения быстрые, точные и обычно не требуют больших затрат на программирование или контекст. Хотя они могут полагаться на наш модуль расширения, все это представляет собой собственный код C# и, как правило, очень похоже на то, что вы сделали в VB6.
Требования
Требования к конвертеру
- Конвертер работает в среде VB6 IDE. Ну, вы знаете, IDE программы, которую вы пытаетесь преобразовать.
Требования к преобразованной программе
- Visual Studio поддерживает некоторые относительно современные версии C#. Или чередовать.
- Пакеты Visual Basic Power Pack/Другая ссылка/Предоставлено в репозитории, так как в некоторые дни его может быть трудно найти.
- Позволяет использовать стандартные функции VB, такие как
Mid
, Trim
, Abs
, DateDiff
и т. д., непосредственно в коде C#. - Обеспечивает совместимость на 99,9% с функциональностью VB6 (за исключением
Format
...) без необходимости использования сторонней библиотеки черного ящика (она от MS, поэтому это черный ящик стороннего производителя). - Легко повторить, как только он будет преобразован и запущен.
Инструкции
Пожалуйста, посетите вики для получения дополнительной информации об использовании.
Рекомендации по проектированию
- Простой — не предназначен для 100%-ной конверсии. Просто, может быть, 80–90% тяжелой работы.
- На базе VB6 — почему бы и нет? У вас должен быть работающий компилятор VB6, если вы все равно конвертируете ИЗ vb6.
- Пользовательский — он был создан для личного проекта и, следовательно, специально адаптирован для нашего варианта использования. Но нет никакой причины, по которой кто-то не мог бы изучить логику и настроить ее для решения своих собственных проблем.
- Оппортунистический. Этот код во многом зависит от относительной однородности VB6 IDE:
- Интервал относительно последовательный, поскольку его обеспечивает IDE.
- Капитализация ключевых слов может быть гарантирована.
- Мы используем преимущества Microsoft Power Pack и НЕ нуждаемся в преобразовании большинства основных операторов VB6. Кроме того, вы можете продолжать использовать такие операторы USE, как
DateDiff
, Left
, Trim
, как в VB. Или, если хотите, начните мигрировать от них ПОСЛЕ преобразования. Мы просто используем библиотеку Microsoft для максимальной совместимости и, следовательно, у нас нет большой библиотеки замены строк, и мы не полагаемся так сильно, как некоторые преобразователи, на наши собственные DLL или библиотеки (мы создаем несколько для простоты синтаксиса, но конечным результатом является чистый код C#).
- Не предполагается — предполагается, что код, скомпилированный в VB, поэтому не предполагается, что ссылка, которую он не может разрешить, не будет найдена.
- Универсальный импорт — импортирует КАЖДЫЙ модуль кода, как это делал VB6 автоматически. Заставьте Visual Studio решать, какие из них использовать, просто оптимизируя импорт после преобразования.
- C# 2017 — это опоздание. Никогда не было бесплатного решения для VB6 -> C#, а теперь, когда VB.NET более или менее снят с производства, почему бы и нет?
Известные проблемы (только v1)
- В настоящее время конвертер часто отказывается от файла, который содержит слово «Свойство» где-либо в нем (кроме объявления свойства). Хотя это проблема и, вероятно, будет исправлена, она возникла ближе к концу полезности проекта (и, следовательно, не была срочной в списке ремонта), и там, где она препятствовала прогрессу, переменная, содержащая слово «...Свойство», был просто временно переименован во что-то вроде «...Prppty», а затем снова изменен в преобразованном файле.
- Эта проблема была решена в версии 2, однако в некоторых случаях она все еще может появиться в версии 1.
Минусы
- Это не приведет к созданию кода, который будет компилироваться в сгенерированной форме. «Последнюю милю» просто сложнее всего автоматизировать, и зачастую ее лучше всего выполнять вручную. Казалось более целесообразным заставить что-то работать по большей части и завершить все крайние случаи или окончательное преобразование вручную.
- Ограниченная настройка пользовательского интерфейса (но безграничная настройка на основе кода). Это не самое настраиваемое решение. Если, конечно, вы не захотите немного углубиться в исходники конвертера. Но именно поэтому он доступен.
- Нелинованный вывод. Полученный код является стилистически беспорядочным. Вот для чего нужна современная IDE. Все плохое форматирование можно исправить с помощью ^K^D. Неиспользованный импорт с помощью ^K^E. И есть много дополнительных { и }, которые вы, вероятно, захотите удалить.
- Конвертер в настоящее время ДЕЙСТВИТЕЛЬНО плохо справляется с границами цикла. Извините, это одна из ловушек преобразования VB6->C#, и в том, как оно преобразуется, не так уж много логики. Это утомительно, но выполните поиск всех циклов for по всему проекту и вручную проверьте границы.
- Для каждого события существует дополнительный метод. Один для правильной подписи, другой для оригинальной подписи. В большинстве случаев избыточность не является необходимой, но она обеспечивает наиболее простое преобразование. В большинстве случаев (но не во всех, поэтому я этого не делаю) их можно свести к одному методу.
ПРИМЕЧАНИЕ. В большинстве случаев, когда конвертер знает, что возникнет проблема, он аннотирует код комментарием // TODO:
:. Обязательно подробно разберитесь с каждым из них.
Плюсы
- Это бесплатно.
- У вас есть исходный код (настройте его, что угодно).
- Делайте все это целиком или только один файл за раз.
- Это намного лучше, чем делать все вручную.
- Это даст вам хорошее представление о том, что происходит, без необходимости ВСЕХ ручных усилий для простого преобразования.
- Не самое быстрое преобразование, но простое (но версия 2 стала намного лучше). Проверьте такие функции, как
ConvertSub
или ConvertPrototype
.- Но подумайте об этом... Вы хотите совершить одноразовую конверсию, а не повторять ее снова и снова во время конвертируемого выполнения.
- Позволяет проверить, как что-то преобразуется. Не нравится результат? Измените это.
- Вы можете поставить точку останова VB6 где угодно и остановиться. Кроме того, просто добавьте строку типа
If LineN = 387 Then Stop
, и конвертер тут же остановится.
Дополнительно
- Линтер кода VB6.
?Lint
. Искорените как можно больше технического долга еще до начала процесса. - Форма VB6 в XAML
Будущие возможности
Проект практически в том виде, в котором он есть. Он работает над тем, что делает. Однако стоит обратить внимание на такие вещи, как «Свойства расширения». Если C# когда-либо реализовал это или что-то в этом роде, преобразование .Visible = True
станет гораздо более простым. Поскольку C# теперь использует перечисление вместо логического значения, это невозможно, но с этой функцией это было бы возможно.
Контакт
- Если у вас есть какие-либо вопросы, сомнения или вам просто нужны быстрые советы, смело открывайте проблему. Я не могу гарантировать многого, но я стараюсь!