2008-09-16 8 views
3

J'ai un projet petit à moyen qui est en C++/CLI. Je déteste vraiment les extensions de syntaxe de C++/CLI et je préférerais travailler en C#. Y a-t-il un outil qui fait un travail décent de traduction de l'un à l'autre?Traduire C++/CLI en C#

EDIT: Quand j'ai dit C++ managée avant apparemment voulu C++/CLI

Répondre

4

Vous ne pouvez traduire le code C++ géré (et le code C++/CLI) en C# que si le code C++ est entièrement géré. Si ce n'est pas le cas, c'est-à-dire si le code natif est inclus dans les sources, des outils tels que .NET Reflector ne pourront pas traduire le code pour vous. Si vous avez un code C++ natif mélangé, alors je vous recommande de tenter de déplacer le code natif dans une DLL séparée, de remplacer vos appels aux fonctions DLL par des fonctions de raccord facilement identifiables, de compiler votre projet en pur .NET bibliothèque, puis utilisez le réflecteur .NET pour le décompiler en code C#. Ensuite, vous pouvez remplacer les appels aux fonctions stub par des appels p-invoke à votre DLL native.

Bonne chance! Je ressens pour toi!

0

Retour ~ 2004 Microsoft avait un outil qui convertirait géré C++ C++/CLI ... en quelque sorte. Nous l'avons exécuté sur quelques projets, mais pour être honnête, la quantité de travail laissée pour nettoyer le projet n'était pas moins que la quantité de travail qu'il aurait fallu faire pour la conversion à la main en premier lieu. Je ne pense pas que l'outil ait jamais été publié dans un communiqué public (peut-être pour cette raison). Je ne sais pas quelle version de Visual Studio vous utilisez, mais nous avons géré le code C++ qui ne sera pas compilé avec Visual Studio 2005/2008 en utilisant le commutateur/clr: oldSyntax et nous avons toujours une relique VS 2003 autour pour ça.

Je ne connais aucune façon d'aller de C++ C# de manière utile ... vous pouvez essayer disjoncter rond à travers le réflecteur :)

2

Je ne sais pas si cela va fonctionner, mais essayez d'utiliser .Net Reflector avec le plug-in ReflectionEmitLanguage. Le plug-in RelelectionEmitLanguage prétend convertir votre assembly en code C#.

0

De tels projets sont souvent réalisés en C++/cli car C# n'est pas vraiment une option élégante pour la tâche. par exemple. si vous devez vous interfacer avec des bibliothèques C++ natives, ou faire des choses de très haute performance dans le niveau bas C. Alors assurez-vous que celui qui a choisi C++/cli n'avait pas de bonne raison de le faire avant de faire le changement. Cela dit, je suis très sceptique: il y a quelque chose qui fait ce que vous demandez, pour la simple raison que tout le code C++/cli n'est pas traduisible en C# (et probablement aussi).

Questions connexes