2009-09-21 3 views

ответ

6

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

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

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

1

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

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

Кроме того, прочитать: Translate C++/CLI to C#

4

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

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

Несколько советов я на построчно

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