VB6 vers C#
Un convertisseur VB6 -> C# 2017 basé sur VB6.
Usage
Utilisation gratuite. Libre de fourchette. Libre de contribuer. Libre de poser des questions. Libre de vendre. Libre de vendre sous votre propre nom... Libre de faire à peu près tout sauf dire que je ne peux pas (voir LICENCE).
Voir ci-dessous pour les informations de base. Voir le Wiki pour des informations plus détaillées. N'hésitez pas à contacter pour obtenir de l'aide.
Démarrage rapide
- Ouvrez le fichier
prj.vbp
, démarrez le programme (Nécessite l'IDE VB6). - Entrez quelques valeurs de configuration dans le formulaire
Config
via le bouton. - Maintenant que vous avez sélectionné votre projet, cliquez sur le bouton
SCAN
. Cela aide le convertisseur à connaître la différence entre les méthodes sans parenthèses et les variables/constantes. Il crée également une liste complète des importations (qui peuvent être nettoyées dans l'IDE VS 2019 via ^K^E). - Si vous le souhaitez, cliquez sur
SUPPORT
pour générer la structure de support de base du projet.- Alternativement, les fichiers
VBExtension.cs
et VBConstants.cs
peuvent être copiés directement depuis la racine du projet et inclus ailleurs.
- Ensuite, entrez un nom de fichier et cliquez sur
Single File
pour essayer de convertir le fichier que vous entrez à côté.
Si vous souhaitez convertir l'intégralité du projet, cliquez simplement sur ALL
, et il effectuera dès le départ l'analyse, la génération du support et la conversion de l'intégralité du projet.
REMARQUE : ce n'est peut-être pas le plus rapide, cela nécessite quand même un effort manuel, mais c'est plus rapide que de TOUT faire manuellement !
Mises à jour 2021-12-01
La version originale du convertisseur abordait le problème selon une approche bloc par bloc, séparant chaque unité de programme logique dans sa propre chaîne et la convertissant elle-même. En conséquence, le convertisseur a effectué plusieurs passes et a fonctionné extrêmement lentement. Après avoir mis à jour le linter pour ne pas utiliser cette approche, mais simplement parcourir le code de haut en bas, il est apparu évident que le convertisseur pouvait faire la même chose avec autant de précision.
Ainsi, la v2 du convertisseur est publiée aujourd'hui, aux côtés de la v1, via des boutons radio sur le formulaire principal. N'hésitez pas à mélanger et assortir, convertir l'ensemble du projet avec l'un, puis des fichiers individuels avec l'autre. Espérons qu’avec les deux approches complètement différentes, l’une des deux fonctionnera mieux que l’autre et entraînera moins de travail. Encore une fois, ils ne représentent encore, tous deux, qu’une conversion de 80 à 90 %. Il y a beaucoup de choses que vous devrez faire à la main et revérifier (comme les limites de boucle), mais encore une fois, il vaut mieux changer tous les &
s de votre code VB6 en +
s pour C#.
Comment puis-je...?
De nombreuses questions se posent en matière de conversion. Si vous souhaitez simplement savoir comment ce convertisseur traite des modèles spécifiques, veuillez consulter la section Comment puis-je... ? page de notre wiki.
Que vous utilisiez ce convertisseur ou non, nous donnons notre solution aux énigmes de conversion fréquemment rencontrées. Nos solutions sont rapides, précises et n'utilisent généralement pas beaucoup de programmation ou de contexte. Bien qu'ils puissent s'appuyer sur notre module d'extension, tout cela est du code C# natif et, généralement, assez similaire à ce que vous avez fait dans VB6.
Exigences
Exigences du convertisseur
- Le convertisseur fonctionne dans l'IDE VB6. Vous savez, l'IDE du programme que vous essayez de convertir.
Exigences du programme converti
- Visual Studio prenant en charge une version relativement moderne de C#. Ou alterner.
- Visual Basic Power Packs / Un autre lien / Fourni dans le Repo car il peut être difficile à trouver certains jours
- Permet d'utiliser des fonctions VB standard telles que
Mid
, Trim
, Abs
, DateDiff
, etc., directement dans le code C#. - Assure une compatibilité de 99,9 % avec la fonctionnalité VB6 (sauf pour
Format
...), sans avoir besoin d'une bibliothèque de boîte noire tierce (elle vient de MS, c'est donc une boîte noire de première partie). - Facile à parcourir une fois converti et opérationnel.
Instructions
Veuillez consulter le wiki pour plus d'informations sur l'utilisation.
Considérations de conception
- Simple – Non conçu pour effectuer une conversion à 100 %. Peut-être seulement 80 à 90 % du gros travail.
- Basé sur VB6 - Parce que pourquoi pas ? Vous devez disposer d'un compilateur VB6 fonctionnel si vous convertissez de toute façon FROM vb6.
- Personnalisé - Ceci a été créé pour un projet personnel et est donc spécifiquement adapté à notre cas d'utilisation. Mais il n’y a aucune raison pour que quelqu’un ne puisse pas étudier la logique et la modifier en fonction de ses propres problèmes.
- Opportuniste - Ce code s'appuie fortement sur l'uniformité relative de l'IDE VB6 :
- L'espacement est relativement cohérent car l'EDI l'applique.
- La majuscule des mots clés peut être garantie.
- Nous profitons des Microsoft Power Packs et n'avons PAS besoin de convertir la plupart des instructions VB6 principales. De plus, vous pouvez continuer à UTILISER des instructions telles que
DateDiff
, Left
, Trim
comme vous le feriez en VB. Ou, si vous préférez, commencez à vous en éloigner APRÈS la conversion. Nous utilisons simplement la bibliothèque de Microsoft pour une compatibilité maximale et, par conséquent, nous ne disposons pas d'une grande bibliothèque de remplacement de chaînes, et nous ne comptons pas non plus autant que certains convertisseurs sur nos propres DLL ou bibliothèques (nous en générons quelques-unes pour faciliter la syntaxe, mais le le résultat final est du code C# pur).
- Sans prétention - Cela suppose que le code compilé en VB, il ne suppose donc pas que les références qu'il ne peut pas résoudre ne seront pas trouvées.
- Importations universelles - Importe TOUS les modules de code, tout comme VB6 le faisait automatiquement. Faites en sorte que Visual Studio décide lesquels sont utilisés simplement en optimisant les importations après la conversion.
- C# 2017 – C’est un arrivant tardif. Il n'y a jamais eu de solution gratuite pour VB6 -> C#, et maintenant que VB.NET est plus ou moins abandonné, pourquoi pas ?
Problèmes connus (v1 uniquement)
- Actuellement, le convertisseur rechigne souvent à un fichier qui contient le mot « Propriété » n'importe où (autre qu'une déclaration de propriété). Bien que cela soit pénible et qu'il sera probablement résolu, ce problème a été rencontré vers la fin de l'utilité du projet (et donc pas urgent sur la liste de réparation), et là où cela a gêné la progression, la variable qui contenait le mot « ... Propriété » a simplement été renommé temporairement en quelque chose comme «... Prppty », puis modifié à nouveau dans le fichier converti.
- Ce problème a été résolu dans la version 2, mais il peut encore apparaître dans certains cas dans la v1.
Inconvénients
- Cela ne produira pas de code qui sera compilé sous sa forme générée. Le dernier kilomètre est tout simplement le plus coûteux à automatiser, et il est souvent préférable de le faire manuellement. Il semblait plus opportun de faire en sorte que quelque chose aille jusqu'au bout et de terminer les cas extrêmes ou la conversion finale à la main.
- Personnalisation limitée de l'interface utilisateur (mais personnalisation illimitée basée sur le code). Ce n'est pas la solution la plus personnalisable. À moins, bien sûr, que vous souhaitiez vous plonger dans un peu de code source sur le convertisseur. Mais c'est pourquoi il est disponible.
- Sortie non pelucheuse. Le code qui en résulte est un gâchis stylistiquement. C'est à cela que sert un IDE moderne. Tout le mauvais formatage peut être nettoyé avec ^K^D. Importations inutilisées avec ^K^E. Et il y a beaucoup de { et } supplémentaires que vous souhaiterez probablement supprimer.
- Le convertisseur est actuellement VRAIMENT mauvais aux limites de la boucle. Désolé, c'est l'un des pièges d'une conversion VB6->C#, et il n'y a pas beaucoup de logique dans la façon dont elle est convertie. C'est fastidieux, mais effectuez une recherche à l'échelle du projet pour toutes les boucles et inspectez manuellement les limites.
- Il existe une méthode supplémentaire pour chaque événement. Un pour la signature correcte, un pour la signature originale. Dans la plupart des cas, la redondance est inutile, mais elle constitue la conversion la plus simple. Celles-ci peuvent être réduites à une seule méthode dans la plupart des cas (mais pas dans tous, c'est pourquoi je ne le fais pas).
REMARQUE : La plupart des endroits où le convertisseur sait qu'il y aura un problème, il annotera le code avec un commentaire // TODO:
:. Assurez-vous de bien aborder chacun de ces éléments.
Avantages
- C'est gratuit.
- Vous avez la source (personnalisez-la, peu importe).
- Faites le tout ou juste un fichier à la fois.
- C'est bien mieux que de tout faire à la main.
- Cela vous donnera un bon aperçu de ce qui se passe, sans avoir à faire TOUS les efforts manuels pour effectuer une simple conversion.
- Ce n'est pas la conversion la plus rapide, mais une conversion simple (mais la v2 s'est bien améliorée). Inspectez les fonctions telles que
ConvertSub
ou ConvertPrototype
.- Mais réfléchissez-y... Vous cherchez à effectuer une conversion ponctuelle, sans exécution répétée lors de l'exécution de la conversion.
- Permet d'inspecter la façon dont quelque chose est converti. Vous n'aimez pas le résultat ? Changez-le.
- Vous pouvez placer un point d'arrêt VB6 où vous le souhaitez et vous arrêter. De plus, ajoutez simplement une ligne comme
If LineN = 387 Then Stop
, et le convertisseur s'arrêtera là.
Suppléments
- Un linter de code VB6.
?Lint
. Éliminez autant de dettes technologiques avant même de commencer le processus. - Formulaire VB6 vers XAML
Possibilités futures
Le projet est en grande partie tel quel. Cela fonctionne à ce qu'il fait. Cependant, quelques éléments à surveiller sont des éléments tels que les « Propriétés d'extension ». Si C# a déjà implémenté ceci ou quelque chose du genre, la conversion de .Visible = True
devient beaucoup plus simple. Étant donné que C# utilise désormais une énumération au lieu d'un booléen, cela n'est pas possible, mais ce serait le cas avec cette fonctionnalité.
Contact
- Si vous avez des questions, des préoccupations ou si vous souhaitez simplement quelques conseils rapides, n'hésitez pas à ouvrir un problème. Je ne peux pas garantir grand-chose, mais j'essaie !