Tutorial de migration vb6 en vb.net : un cas concret

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 818 fois - Téléchargée 45 fois

Contenu du snippet

Tous les développeurs VB6 doivent envisager de migrer à VB.Net
La principale question qu'ils se posent est : Est-ce que je pourrais faire la même chose en VB.Net (et aussi facilement) ?

Pour tenter d'y répondre, je vous présente un cas concret d'une migration d'un projet VB6 de plus de 3000 lignes de code en VB.Net :

Gravity Screen Saver : un écran de veille chaotique :
www.vbfrance.com/article.asp?Val=2162

Source / Exemple :


La première question à vous poser est : avez-vous besoin de passer en .Net ? vous pouvez très bien interfacer du code VB6 en .Net et continuer ainsi en VB6. Seulement, si votre code doit évoluer, ce n'est sans doute pas la meilleure solution. Dans mon projet, il y a des petits bugs d'affichage des images, et étant donnée la complexité du code, il est assez difficile de déboguer les classes graphiques que j'avais récupérées sur le web. En utilisant les classes graphiques de .Net, je me base sur du code susceptible d'être testé par des millions de développeurs. Je me lance donc dans mon premier programme .Net en testant au fur et à mesure chaque technique dont j'ai besoin :

Version 1.0 du 2/5/2002 : VBNetScreenSaver : Un écran de veille minimal en VB.Net (et C# aussi)
www.vbfrance.com/article.asp?Val=4061
J'ai simplement traduit en VB.Net le code en CSharp (C#, le successeur de C++ : C++++) de Tran Khanh Hien : "TKHScreen Saver.zip"
Ce code récupère l'argument de la ligne de commande afin de traiter les 2 principaux cas rencontrés dans le lancement d'un écran de veille : la configuration ou bien le lancement normal de l'écran de veille. Celui-ci affiche une bannière et quitte lorsque l'on bouge la souris. Le code VB.Net ressemble énormément au code C# : on peut presque faire du copier-coller entre les 2 langages.

Ensuite, il faut pouvoir sauver la configuration de l'écran de veille ; la nouvelle tendance est de ne plus utiliser la base de registre (et c'est tant mieux !), mais de revenir au bon vieux fichiers ini, sauf que c'est le format XML qui est à la mode maintenant : il permet une structuration poussée et facilite l'échange de données via la standardisation des formats XML, que l'on appelle les "applications XML" : www.oasis-open.org/cover/xml.html#applications

Version 2.0 du 15/5/2002 : VBNetScreenSaver2 : Un écran de veille configurable minimal en VB.Net
www.vbfrance.com/article.asp?Val=4237
La sauvegarde de la configuration a été faite à partir de l'article : "Creating Your Own Dynamic Properties and Preserve Property Settings in Visual Basic .NET" de Steve Hoag de Microsoft Visual Studio Team.
Le premier problème rencontré avec la plateforme .Net est le nom du fichier de configuration : on ne peut plus le changer, car il est basé sur le nom de l'assemblage (assembly : le code exécutable). Le problème c'est que lorsque l'écran de veille est installé, ce nom est tronqué en un nom DOS 8.3 pffffffft ! ça commence bien... (heureusement, je n'ai pas eu d'autre problème ensuite). J'ai résolu ce problème en renommant le fichier de configuration pendant l'exécution (ou en prenant un nom de 8 lettres max.).

Ensuite, il a fallut vérifier que la plateforme.Net était aussi performante au niveau du graphisme que VB6 (le GDI Win32 en fait) :

Version 3.0 du 08/07/2002 : VBNetScreenSaver3, suite : Gestion optimisée des sprites :
www.vbfrance.com/article.aspx?Val=5026
Les résultats ne sont pas très concluants : le GDI32 est sensiblement plus performant que .Net en ce qui concerne l'affichage des sprites (petite image en mouvement). Cependant, le code .Net est plus simple et il s'appui sur GDI+ qui est disponible aussi pour Win32, et qui n'est pas encore complètement interfacé dans .Net d'après ce que j'ai cru comprendre. Par exemple, ces 2 optimisations ne sont pas encore disponibles en .Net :
- CachedBitmap : dc.DrawCachedBitmap(cb, x, y)
- dc.SetInterpolationMode(InterpolationModeNearestNeighbor)
En faisant des tests, je me suis rendu compte que l'on pouvait faire absolument n'importe quoi en .Net, comme par exemple interfacer le GDI32 dans .Net, et assez facilement en plus ! Voici l'origine de la classe Win32Support en C# que j'ai traduis en VB.Net :
www.codeguru.com/cs_graphics/flicker_free.html
Mais en utilisant le double buffering pour régler le problème du scintillement (flicker) d'une animation, c'est tout aussi facile à faire que d'utiliser l'Autoredraw en VB6, et les performances sont acceptables.

Ensuite, la gestion des fichiers est agréablement simplifiée dans .Net :

VBNetScreenSaver4, suite : *.jpeg en fond d'écran et pour n sprites
www.vbfrance.com/article.aspx?Val=5202
VBNetScreenSaver4 est un écran de veille qui choisit des images de fond et de sprites au hasard : il est facilement configurable pour afficher votre collection d'images jpg. Vous pouvez reprendre ce code pour refaire par exemple un simulateur d'aquarium. Le code est beaucoup plus simple (niveau 1) qu'avec la version 3.

Enfin, la dernière étape de la migration concerne le simulateur de gravité et l'interface de configuration :

Gravity.Net : l'écran de veille chaotique en VB.Net (Gravity2.scr) :
www.vbfrance.com/article.aspx?Val=5646
Pour le simulateur, j'ai utilisé l'assistant de migration qui importe un projet VB6 depuis Visual Studio .Net et qui vous tartine votre code de commentaires du genre : "ToDo : ceci ne marche pas comme ça en VB.Net" ! C'est une bonne idée d'utiliser l'assistant, à condition de ne pas en abuser. Je préconise son utilisation pour glaner des astuces de programmation en .Net et pour faciliter le portage de portions réduites de code, et je le déconseille vivement pour la migration du code de l'interface de votre application, par exemple.
Pour l'interface, j'ai trouvé qu'une ListView.Net pouvait avoir des cases à cocher et j'ai tout de suite compris que cela allait me simplifier considérablement l'interface. Quelques lignes de codes ajoutés pour traiter les saisies et voilà !
Si vous voulez faire un écran de veille, sachez que la gestion des erreurs est améliorée dans Gravity.Net par rapport à VBNetScreenSaver4 et il y a plus d'option de transition entre les scénarios aussi.

Voilà ! (je ne suis pas payé par Bill G. mais Microsoft m'a tout de même offert Visual Sudio .Net à la suite d'un ancien abonnement professionnel à MSDN, sympa quand même :-)
patrice.dargenton@free.fr
http://patrice.dargenton.free.fr/index.html

A voir également

Ajouter un commentaire

Commentaires

LittleKeichi
Messages postés
6
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
25 novembre 2011
-
Merci bien pour les infos car je suis un NewProgrammeur et que j'ai donc tout à apprendre encore...
Mais une petite question tout de même : est-ce que l'utilisation de VB.NET est-il sur la voie d'une programmation aussi souple que C# ? Car bien que la programmation en VB soit simple, il n'est pas possible de faire tout ce dont on a envie ou alors, je le conçoit, je ne sais pas m'y prendre.

En tout cas, merci pour tout !
@ la revoyure ! :o)
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Les FileGet et FilePut, ça marche encore en VB.Net ! voir :
VBWaveComp : Le comparateur de spectre audio en VB.Net :
Vers un "benchmark" de la compression audio
http://www.vbfrance.com/article.aspx?Val=6675

Je suis partie de code en VB6, la migration s'est passée sans problème, j'ai opté pour l'interface de comptabilité avec VB6 pour une migration en douceur, en attendant une migration pure .Net
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Voir aussi un aute exemple complet de migration :
IA:RN:VBPerceptron : le code le + simple possible en VB6 & VB .Net
http://www.vbfrance.com/article.aspx?Val=7015

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.