2008-09-12 6 views
16

Je maintiens une ancienne application PC uniquement écrite en Delphi 7. Bien que Delphi m'a très bien servi dans le passé, je ne l'utilise plus que pour cette seule application et je trouve mes compétences avec le langage diminuant. Sa syntaxe est trop différente de celle de Java/Ruby, donc il me faut plus de temps pour entrer dans le groove de l'écriture de nouveau code, plus il est si vieux que je n'ai pas utilisé beaucoup d'interface s donc le code n'est pas géré qui me semble ancien maintenant! Beaucoup de mes utilisateurs se tournent vers Vista qui peut exécuter l'application en mode de compatibilité ou peut avoir des problèmes GPF selon la façon dont leur PC est configuré par leur département informatique, donc je dois faire un peu de maintenance sur l'application. Je me demande si je devrais sauter à une pile plus familière.Quels outils existent pour convertir une application Delphi 7 en C# et le framework .Net?

Existe-t-il un outil automatisé qui fera le travail de conversion de la base de code en C#, me laissant concentrer sur la conversion sur tous les composants non standard? J'utilise un composant de base de données intégré appelé AbsoluteDatabase qui est compatible BDE et qui utilise le langage SQL standard, ainsi qu'un composant de navigateur HTML Delphi natif qui peut être remplacé par quelque chose du monde de Microsoft.

Quelle est la qualité de ces outils de conversion?

Répondre

14

Je ne connais pas d'outils automatisés pour effectuer cette conversion. Personnellement, je vous suggère de rester avec Delphi, peut-être juste mettre à jour vers une nouvelle version. J'ai vu quelques DOM de code qui essayent de convertir de Delphi en C#, mais cela n'aborde pas le problème de bibliothèque. CodeGear (formellement Borland) a un outil pour going from C# to Delphi qui fonctionne correctement.

Je suppose que les outils qui vont dans l'autre sens fonctionneront de la même manière (nécessitant beaucoup d'édition). Voici un outil suédois qui fonctionne sur le même principe CodeDOM pour aller de Delphi to C# (et un certain nombre d'autres langues). Il y en a d'autres, je ne peux pas les trouver maintenant.

Une autre option serait de mettre à niveau vers une version plus renvoyée de Delphi pour .NET et de porter votre code sur .NET de cette façon. Une fois que vous l'avez fait fonctionner dans Delphi pour .NET (qui sera assez facile, sauf pour la DB incorporée, à moins qu'ils aient une version .NET), vous pouvez utiliser .NET Reflector et File Disassembler inverser l'IL vers C#. Vous utiliserez toujours la VCL, mais vous pouvez utiliser C# au lieu de Object pascal.

Une autre solution similaire serait de le porter à Oxygene by RemObjects. Je crois qu'ils ont un chemin de migration Delphi Win32 vers WinForms. Ensuite, utilisez .NET Reflector et File Disassembler inverser le IL à C#.

En résumé, pas de réponses faciles. La migration de la langue est plus facile que la migration de la bibliothèque. Cela dépend en grande partie des composants tiers que vous avez utilisés (au-delà de AbsoluteDatabase) et si vous avez effectué des appels d'API Windows directement dans votre application.

Une autre option complètement différente serait trop chercher une équipe off-shore pour maintenir l'application. Ils peuvent probablement le faire à moindre coût. Vous pourriez trouver quelqu'un au pays, mais cela vous coûterait sans doute plus (bien qu'avec le dollar affaissé et le marché du travail pauvre vous ne savez jamais ....)

Bonne chance!

4

Beaucoup de mes utilisateurs se déplacent vers Vista qui peut exécuter l'application en mode compatibilité ou peuvent avoir des problèmes GPF en fonction de la façon dont leur PC est configuré par leur service informatique, donc je dois faire un peu maintenance sur l'application . Je me demande si je devrais sauter à une pile plus familier.

À moins que vous ne fassiez quelque chose de non standard, les applications D7 devraient fonctionner correctement sous Vista. En ce qui concerne la conversion en C#, je pense que la plupart des outils de conversion seraient une perte de temps. Une meilleure approche peut être de réécrire l'application à partir de zéro.

2

Il n'y a pas de réponse facile, mais gardez à l'esprit que la variante Delphi.net du langage cible l'exécution .net, et que les différentes langues sur .net peuvent interagir étroitement.

Vous pourriez essayer de le compiler dans Delphi.Net, en le factorisant en différents assemblages et en convertissant les assemblages à la main un par un. Reflector pourrait aider à faire du reverse engineering du code compilé dans un squelette de code C# équivalent mais sans commentaires, noms de variables internes, etc.

D'autre part, Delphi.net peut être assez bon (TM) pour ce projet. Mais à moins d'avoir une bonne suite de tests (je suppose que non, étant donné l'état de l'art dans Delphi 7), vous allez introduire des bugs.

5

Il y a eu un rapport scientifique d'une transformation réussie d'un projet Delphi de 1,5 million de lignes en C# par John Brant. Il a écrit un parser Delphi, un générateur C# et de nombreuses règles de transformation sur l'AST. Étendre progressivement l'ensemble des règles, faire une construction quotidienne, beaucoup de tests unitaires, et quelques réécritures de parties difficiles de Delphi lui ont permis avec une équipe de 4, parmi lesquels certains des développeurs originaux, avec de profondes connaissances Delphi, de migrer le logiciel en 18 mois. John Brant étant le développeur original du navigateur de refactoring et du kit de construction du compilateur SmaCC, il est peu probable que vous puissiez aller aussi vite.

Questions connexes