Миграция Borland C ++ в C # - PullRequest
1 голос
/ 17 июня 2009

Я должен выполнить проект, в который мне нужно перенести код Borland C ++ на C #, Какие важные шаги мне нужно выполнить для плавной миграции кода? и, пожалуйста, предложите какие-либо советы и рекомендации?

Ответы [ 3 ]

3 голосов
/ 17 июня 2009

Это на самом деле означает полное переписывание. На вашем месте я бы попробовал C ++ / CLI вместо C #. Таким образом, вы можете постепенно переписать свой код и преобразовать его в управляемый код.

Что нужно учитывать при переходе на C # или C ++ / CLI:

  1. Разделите ваше программное обеспечение на модули с чистыми интерфейсами (используя n-уровневые архитектуры, MVC, ...). Если каждый раздел является COM-объектом, вы можете даже попытаться перенести только части и использовать COM-объекты в .NET.
  2. Определите библиотеки, от которых вы зависите, и проверьте, как их можно заменить в .NET
  3. Определите, где вы используете указатели, и проверьте, как вы можете преобразовать этот код в C ++
  4. Проверьте, где вы используете RAII-объекты и найдите способ получить тот же результат в .NET.

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

1 голос
/ 17 июня 2009

Если вы просто хотите перейти на .NET, рассмотрите возможность использования C ++ / CLI . Если вы действительно хотите перейти на C #, то я бы предложил не использовать путь автоматической миграции, а, скорее, после перехода на C ++ / CLI, провести новую разработку на C # и составить план по переносу существующего кода из C ++ в C #, как только это произойдет. надежная тестовая среда для проверки изменений, внесенных с течением времени.

Но если вам просто необходимо выполнить миграцию большого взрыва, вы можете подумать о портировании на C ++ / CLI для создания управляемых сборок и использовать один из инструментов disassmble-IL-to-C # для автоматизации процесса. Я категорически против этого - но это ваше время и проект, а не мое.

1 голос
/ 17 июня 2009

Правда, это не будет миграцией кода, не так ли? По сути, вы переписываете систему, которая существует на языке a (в данном случае C ++) на языке b (C #). Эти два языка не имеют много общего для облегчения простого механического перевода (C # <-> Java гораздо проще переводить механически), и в зависимости от того, насколько современным является код C ++, вы не сможете перевести некоторые идиомы непосредственно.

Мой подход для проекта разумного размера - написать «кросс-компилятор» на языке, который позволяет легко обрабатывать текст (я использовал ruby ​​в последний раз). Этот кросс-компилятор должен быть способен механически переводить около 80% кода в нечто, что почти компилируется на целевом языке. Это также позволяет вам определить области кода, которые требуют (много) внимания со стороны программиста, потому что вам придется взять существующий код и написать функциональный эквивалент в C #. Не забывайте, что для этого инструмента перевода вам также потребуется написать код, который может собрать необходимые фрагменты кода из заголовочных файлов и файлов реализации. В зависимости от того, насколько хорошо организован код C ++, это нетривиальная задача.

...