перевести C ++ / CLI на C # - PullRequest
       12

перевести C ++ / CLI на C #

2 голосов
/ 21 сентября 2009

Как я могу перевести небольшой проект C ++ / CLI в c #

Ответы [ 3 ]

6 голосов
/ 21 сентября 2009

Одним обходным, ручным способом было бы скомпилировать ваш проект C ++ / CLI и открыть выходную сборку в Reflector . Разберите каждый класс, преобразуйте дизассемблированный IL в C # и сохраните этот код.

Что касается автоматического способа сделать это, я не могу думать ни о чем из головы.

Как говорится, вы действительно хотите преобразовать свой проект в C #? Если ваш C ++ / CLI-проект использует какой-либо неуправляемый код, вам будет сложно придумать чисто управляемый эквивалент. Если проект более или менее состоит из чистого кода CLR и был написан на C ++ / CLI для написания на C ++ / CLI, я могу понять, что хочу преобразовать его в C #. Но если была причина для написания этого на C ++ / CLI, вы можете оставить это так.

4 голосов
/ 21 сентября 2009

ИМХО, строка за строкой - лучший способ. Я перенес несколько проектов в стиле C ++ на управляемый язык и пробовал разные подходы; переводчики, построчно, скрипты и т. д. Со временем я обнаружил, что наиболее эффективный способ - это делать построчно, хотя сначала это кажется самым медленным способом.

Слишком много потеряно в переводчике. Ни один переводчик не идеален, и вы тратите много времени на исправление переведенного кода. Кроме того, переведенный код, как правило, уродлив и имеет тенденцию быть менее читабельным, чем код, созданный вручную. Таким образом, результатом является исправленная, не очень красивая база кода.

Несколько советов, которые я имею в строке за строкой

  • Начните с определения всех типов листьев
  • Для каждого типа, имеющего деструктор с нетривиальной (освобождающей памятью) реализацией IDisposable
  • Включите правило FxCop, которое проверяет отсутствие вызовов Dispose, чтобы перехватить все места, использующие RAII на основе стека, и пропустило его
  • Обратите особое внимание на использование byref в C ++.
1 голос
/ 21 сентября 2009

Я не пробовал это, но я просто погуглил и нашел это: http://code2code.net/ В соответствии с этим, вы не должны полностью полагаться на код, который он производит:

Вы принимаете, что эта страница выполняет только половину работы. Дальнейшая работа с вашей стороны не требуется. В большинстве случаев переведенный код даже не скомпилируется.

Кроме того, прочитайте это: Переведите C ++ / CLI в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...