Accueil > > > TUTORIAL DE MIGRATION VB6 EN VB.NET : UN CAS CONCRET
TUTORIAL DE MIGRATION VB6 EN VB.NET : UN CAS CONCRET
Information sur la source
Description
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
- 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
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
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|