web-dev-qa-db-fra.com

Comment convertir le code VB6 en C #?

Est-ce que quelqu'un connaît un moyen de convertir du code VB6 en C #?

Existe-t-il un outil qui peut le faire pour moi?

35
basl

VisualStudio propose (ou du moins propose) un assistant pour effectuer une conversion de VB6 en VB.NET (qui pourrait ensuite être converti en C # avec un peu de travail, éventuellement aidé par le convertisseur VB.NET <-> C # de develop), mais la dernière fois que je l'ai utilisé, pour tout ce qui n'était pas trivial, il y avait beaucoup de travail manuel à faire, donc je pense que vous feriez probablement mieux de réécrire ou de porter à la main s'il s'agit d'une application importante et/ou importante.

27
theraccoonbear

Il peut sembler un peu effronté, mais votre cerveau peut être le meilleur outil à utiliser. Cela pourrait valoir la réécriture.

Vous n'avez peut-être pas besoin de le porter. Le VB6 pourrait-il être transformé en composant COM? Port vers COM, appel depuis C #, domicile à temps pour le juge Judy.

12
Derek Smyth

En tant que personne qui l'a fait plusieurs fois, ce n'est pas un processus facile. Vous pouvez utiliser l'outil VB6 vers VB.Net comme indiqué dans cette réponse , puis utiliser Reflector ou SharpDevelop pour convertir en C #. Avec la conversion SharpDevelop, quelques mises en garde. Il bousille toutes les références de tableau et pense qu'il s'agit d'appels de fonction, et tous les opérateurs logiques sont convertis en opérateurs logiques au niveau du bit (et devient & non &&). Avec Reflector, vous perdez un tas de choses. De plus, le convertisseur Visual Studio échoue sur de nombreux projets volumineux, se bloque et ne se termine jamais.

Une fois que vous avez converti votre code en C #, vous devez commencer le vrai travail. La conversion vous permet d'obtenir au mieux 50% du chemin, vous devez corriger une tonne de choses (vous verrez votre code jonché de TODO), refactoriser une tonne de choses, et à la fin vous vous retrouvez avec C # qui est un représentation de votre VB6 - à moins que vous n'ayez un code VB6 très agréable, pas un endroit que vous voulez vraiment être. De plus, tout votre code doit être jonché des aides VB plutôt que d'utiliser les fonctions DotNet appropriées (toutes les fonctions de chaîne sont des aides plutôt que des objets de classe, par exemple0. Si vous avez utilisé des variantes dans toutes ces doivent être réécrits. Si vous avez utilisé beaucoup d'appels API, ils ont généralement besoin d'être réécrits.

Au final, vous obtiendrez une base, mais la conversion d'un grand projet (20-30 formulaires, 30 classes, 30 modules) peut prendre plusieurs mois-homme. La réécriture à partir de zéro, cependant, peut prendre deux fois plus de temps et vous perdez toute votre logique métier. Donc, cela peut être fait (je l'ai fait avec 3 ou 4 grands projets), mais il n'y a pas de panacée, pas de solution miracle, et tout outil qui dit qu'il le fera pour vous seul, ment.

10
Kris Erickson

Ouvrez votre projet avec une nouvelle version de Visual Studio, convertissez votre code en VB.Net puis téléchargez . Net Reflector pour vous aider avec la transformation C #.

Bonne chance!

8
sebagomez

Artinsoft (Maintenant renommé en Mobilize.Net ) fait exactement cela, en particulier le Visual Basic Upgrade Companion .

Cependant, même après avoir utilisé le VBUC, il reste encore certaines parties du système qui doivent être migrées/vérifiées à la main. Mais il s'agit généralement d'un ensemble beaucoup plus petit du problème d'origine. Et certains des problèmes de migration ont été résolus grâce à l'expérience des migrations passées.

Artinsoft est la même société qui a construit l'assistant fourni avec Visual Studio, mentionné dans le post de theraccoonbear. Cependant, si je ne me trompe pas, l'assistant migre uniquement VB6 vers VB.Net.

Divulgation complète: je travaille pour Artinsoft

8
Esteban Brenes

La réponse courte est que VB6 et VB.NET (et par conséquent C #) sont des langages distincts mais des langages apparentés. Il existe de nombreuses différences subtiles (Integer étant Int32 au lieu de Int16) et grossières (graphiques, forme et moteurs d'impression) entre les deux plates-formes. Vous devez traiter cela comme si vous convertissiez vers une plateforme complètement différente.

Les questions sont explorées plus en détail ici

Comment passer d'une grande application de VB6 à VB.NET

4
RS Conley

Microsoft recommande Compagnon de mise à niveau Visual Basic (VBUC) d'ArtinSoft .

Microsoft et ArtinSoft se sont associés pour vous offrir une licence VBUC gratuite. Le code de réduction ci-dessous peut être utilisé pour acheter une licence qui vous permettra de migrer gratuitement jusqu'à 10 000 lignes de code VB6 vers VB.NET ou C #. Il peut également être appliqué lors de l'achat d'une licence plus importante.

Ce n'est pas parfait, le code résultant nécessite encore beaucoup de corrections manuelles jusqu'à ce qu'il compile, mais cet outil vaut quand même le coup.

3
Konstantin Spirin

Une question à vous poser est la suivante: dans quelle mesure est-il important d'avoir C # plutôt que VB.NET? Si vous convertissez une grande application, vous devriez peut-être simplement passer à VB.NET, qui sera moins cher.

Il existe certaines fonctionnalités dans VB6 sans équivalent exact en C # (la gestion des erreurs, la liaison tardive, etc.). Demandez-vous pourquoi cela vaut la peine de l'effort manuel pour les convertir, quand vous pourriez aller sur VB.NET qui les prend en charge.

Et si vous ne me croyez pas (et que personne n'a voté pour ma réponse, sanglotez!) Peut-être que vous croirez Francesco Balena et Dan Appleman (dans un livre Moving to VB .NET ) qui sont d'accord avec moi.

2
MarkJ

Chez GreatMigrations, nous le faisons à la main - nous utilisons nos mains pour développer un compilateur VB6/COM. Le compilateur lit un VBP (ou un groupe de VBP associés) et fait référence à des bibliothèques COM et construit un "modèle sémantique". Ce modèle est un ensemble extrêmement détaillé de tables de symboles et de flux d'opcode qui décrivent de manière complète et précise toutes les structures d'informations définies et les opérations effectuées par le système source.

L'outil applique ensuite une série d'algorithmes qui modifient et restructurent le modèle pour le rendre plus compatible avec .NET et applique éventuellement des transformations personnalisées; par exemple, pour remplacer des composants COM par des classes .NET. Les règles de transformation sont conçues par des personnes et créées "à la main" pour répondre à leurs besoins uniques.

Enfin, le modèle est "exécuté" mais au lieu d'allouer le modèle de données et d'exécuter les opérations, nous écrivons les structures de fichiers, le modèle de données et les opérations dans la notation de la plate-forme cible. Nous pouvons créer à la fois VB.NET et C # en utilisant cette approche. Nous utilisons également ce processus pour migrer ASP sites vers ASPX, (nous avons également un produit FORTRAN-to-C multi-dialecte)

L'approche ne produit pas de logiciel prêt à la production du premier coup, mais elle peut être améliorée et conçue pour produire un "meilleur" logiciel en modifiant la configuration de l'outil et en relançant le processus de traduction. L'avantage de notre outil est sa répétabilité, sa vitesse et sa flexibilité qui facilitent une méthodologie agile de réécriture assistée par outil. L'OMI, les équipes de migration qui tirent parti de notre approche bénéficieront de l'allocation de beaucoup plus de ressources à l'évaluation des alternatives pour la refonte et les améliorations des processus de développement plutôt que de la collecte des exigences fonctionnelles, du codage manuel et des tests. Ils bénéficieront en fin de compte d'un système plus maintenable et d'une reproduction beaucoup plus fidèle des fonctionnalités de l'application d'origine après la migration ainsi que d'un meilleur contrôle et d'une meilleure visibilité pendant la migration.

Une édition d'essai de notre outil est disponible ici gmStudio Trail Request Download . Il vous permettra d'expérimenter avec des codes ASP/VB jusqu'à 10K LOC et fonctionne jusqu'à 30 sessions.

1
mark