2009-09-21 9 views

Répondre

6

Un rond-point, de façon manuelle serait de compiler votre projet C++/CLI et ouvrir l'ensemble de sortie Reflector. Désassemblez chaque classe, faites-la convertir l'IL désassemblé en C# et enregistrez ce code. Comme pour une façon automatique de le faire, je ne peux pas penser à tout de haut en bas de ma tête.

Ces choses étant dit, êtes-vous sûr que vous vraiment voulez pour convertir votre projet en C#? Si votre projet C++/CLI utilise un code non géré, vous aurez du mal à trouver un équivalent purement géré. Si le projet est plus ou moins composé de code CLR pur, et qu'il a été écrit en C++/CLI pour être écrit en C++/CLI, je peux comprendre vouloir le convertir en C#. Mais s'il y avait une raison pour l'écrire en C++/CLI, vous voudrez peut-être le garder ainsi.

1

Je n'ai pas essayé, mais je googlé et trouvé ceci: http://code2code.net/ Selon t il, vous ne devriez pas compter entièrement sur le code qu'il produit:

Vous acceptez que cette page ne fasse que la moitié du travail. Un travail supplémentaire de votre part est requis. Dans la plupart des cas, le code traduit ne sera même pas compilé.

De plus, lisez ceci: Translate C++/CLI to C#

4

À mon humble avis, ligne par ligne est le meilleur moyen. J'ai porté plusieurs projets de style C++ dans un langage géré et j'ai essayé différentes approches; traducteurs, ligne par ligne, script, etc ... Au fil du temps, j'ai trouvé le moyen le plus efficace de le faire ligne par ligne, même si cela semble être le moyen le plus lent au début.

Trop de données sont perdues dans un traducteur. Aucun traducteur n'est parfait et vous finissez par passer beaucoup de temps à corriger le code traduit. En outre, le code traduit en règle est laid et tend à être moins lisible que le code fabriqué à la main. Le résultat est donc une base de code fixe, pas très jolie.

Quelques conseils que j'ai en ligne par ligne

  • Commencez par définir tous les types de feuilles
  • Pour chaque type qui a un non-trivial (mémoire libérant) destructor, mettre en œuvre IDisposable
  • Activez la règle FxCop qui vérifie l'absence d'appels Dispose pour capturer tous les endroits utilisés RAII basé sur la pile et l'a manqué
  • Portez une attention particulière aux utilisations de byref en C++.
Questions connexes