Какие существуют инструменты для преобразования приложения Delphi 7 в С# и .NET Framework?

Я поддерживаю старое приложение только для ПК, написанное на Delphi 7. Хотя Delphi отлично меня обслуживает в прошлом, я теперь использую его только для этого приложения и нахожу свои навыки с уменьшением языка. Его синтаксис слишком отличается от моих "дневных рабочих языков" Java/Ruby, поэтому мне требуется больше времени, чтобы попасть в паз написания нового кода, плюс он настолько стар, что я не использовал много интерфейса s поэтому код не управляется, который кажется мне древним!

Многие из моих пользователей переходят на Vista, которые могут запускать приложение в режиме совместимости или могут иметь проблемы с GPF в зависимости от того, как их ПК настроен их ИТ-отделом, поэтому я должен выполнить некоторое обслуживание в приложении. Мне интересно, следует ли мне перейти к более знакомому стеку.

Есть ли автоматизированный инструмент, который будет работать над преобразованием базы кода в С#, оставив меня сосредоточиться на преобразовании на любые нестандартные компоненты? Я использую встроенный компонент базы данных, называемый AbsoluteDatabase, совместимый с BDE и использующий стандартный SQL, и собственный компонент HTML-браузера Delphi, который можно поменять местами с чем-то из мира Microsoft.

Насколько хороши эти инструменты преобразования?

Ответы

Ответ 1

Я не знаю никаких автоматизированных инструментов для преобразования. Лично я бы посоветовал вам придерживаться Delphi, возможно, просто перейти на новую версию. Я видел пару DOM кода, которые пытаются конвертировать из Delphi в С#, но это не касается проблемы с библиотекой.

CodeGear (формально Borland) имеет инструмент для перехода от С# к Delphi, который работает нормально. Я бы предположил, что инструменты, которые идут в другом направлении, будут работать одинаково (требуется много редактирования). Вот шведский инструмент, который работает по одному и тому же принципу CodeDOM, чтобы перейти от Delphi к С# (и ряда других языков). Есть и другие, я просто не могу их найти прямо сейчас.

Другим вариантом было бы обновление до более поздней версии Delphi для .NET и перенос вашего кода на .NET таким образом. Как только вы его заработаете в Delphi для .NET(это будет довольно просто, за исключением встроенной базы данных, если у них нет версии .NET), вы можете использовать .NET Reflector и File Disassembler отмените IL до С#. Вы все равно будете использовать VCL, но вы можете использовать С# вместо Object pascal.

Другим аналогичным решением было бы переносить его на Oxygene от RemObjects. Я считаю, что у них есть путь миграции Delphi Win32 к WinForms. Затем используйте .NET Reflector и File Disassembler отмените IL до С#.

Короче говоря, нет простых ответов. Языковая миграция проще, чем миграция библиотек. Многое зависит от того, какие сторонние компоненты вы использовали (за исключением AbsoluteDatabase), и если вы сделали какие-либо вызовы Windows API непосредственно в своем приложении.

Другим совершенно другим вариантом было бы слишком искать оффшорную команду для поддержки приложения. Вероятно, они могут сделать это дешево. Вы можете найти кого-то внутри страны, но это будет стоить вам больше никаких сомнений (хотя с провисающим долларом и бедным рынком труда вы никогда не знаете...)

Удачи!

Ответ 2

Многие мои пользователи переходят на Vista который может запускать приложение в совместимости или могут иметь проблемы с GPF в зависимости от того, как их ПК настроенных их ИТ-отделом, поэтому Я должен сделать некоторое обслуживание на выражение. Мне интересно, должен ли я перейдите в более знакомый стек.

Если вы не делаете что-то нестандартное, приложения D7 должны работать нормально в Vista.

Что касается преобразования в С#, я думаю, что большинство инструментов преобразования было бы пустой тратой времени. Лучшим подходом может быть переписать приложение с нуля.

Ответ 3

Был опубликован научный отчет о успешной трансформации 1,5 млн. проектов Delphi на С# Джона Бранта. Он написал парсер Delphi, генератор С# и множество правил преобразования в AST. Постепенно расширяя набор правил, делая ежедневную сборку, множество модульных тестов и некоторую переделку сложных частей Delphi, он позволил ему с командой из 4 человек, среди которых некоторые из первоначальных разработчиков с глубокими знаниями Delphi и С#, чтобы перенести программного обеспечения через 18 месяцев. Джон Брант, являющийся первоначальным разработчиком браузера рефакторинга и комплекта компилятора SmaCC, вряд ли вы сможете быстро это сделать

Ответ 4

Нет простого ответа, но имейте в виду, что вариант языка Delphi.net задает время выполнения .net и что разные языки на .net могут тесно взаимодействовать.

Вы можете попытаться заставить его скомпилировать в Delphi.Net, разложить на разные сборки, а затем перевести сборки вручную по одному. Reflector может помочь преобразовать код скомпилированного кода в скелет кода С#, эквивалентный, но без комментариев, имена внутренних переменных и т.д.

С другой стороны, Delphi.net может быть достаточно хорошим (TM) для этого проекта.

Но если у вас нет хорошего набора тестов (я думаю, вероятно, нет, учитывая состояние дел в Delphi 7), вы собираетесь вводить ошибки.