Mode expert
Comment convertir des
sources Visual Basic for MS-DOS 32 bits en en 64 bits
La conversion de code Visual Basic
for MS-DOS (ou même VB 1.0 à 6.0) 32 bits vers un environnement 64
bits n’est pas une simple recompilation : c’est une migration qui
implique souvent de réécrire ou d’adapter des portions entières du
code.
En effet, VB pour MS-DOS utilisait un
runtime 16/32 bits et des API Windows anciennes, incompatibles avec
les environnements 64 bits modernes.
Voici les points clés pour réussir
cette transition :
1 - Comprendre le contexte VB for
MS-DOS est très ancien (début des années 90) et ne fonctionne pas
nativement sur Windows 64 bits.
Les appels système, bibliothèques et
formats de fichiers utilisés ne sont plus pris en charge.
Il n’existe pas de compilateur VB-DOS
vers 64 bits : il faut porter le code vers un langage ou
environnement moderne (VB.NET, C#, ou VBA 64 bits).
2 - Identifier les dépendances APIs
Windows : Les Declare Function et Declare Sub doivent être adaptés
avec l’attribut PtrSafe et les types LongPtr pour le 64 bits2.
Types de données :
Long (32 bits) → parfois remplacer
par LongPtr (taille dépendante de l’architecture).
Integer (16 bits) → vérifier les
conversions.
Bibliothèques externes (DLL) :
certaines n’existent pas en 64 bits, il faut trouver des équivalents
ou recompiler ces DLL.
3 - Stratégie de migration
Option A – Réécriture en VB.NET
VB.NET est compatible avec les systèmes 64 bits et permet de
réutiliser une partie de la logique métier.
Les formulaires et contrôles VB-DOS
devront être recréés avec WinForms ou WPF.
Les API Windows doivent être
déclarées avec IntPtr et Marshal pour la compatibilité.
Option B – Migration vers VBA 64 bits
(Excel, Access, etc.) Si le code est surtout orienté traitement de
données, VBA 64 bits peut suffire.
Adapter les déclarations API avec
PtrSafe et LongPtr3.
Exemple :
vb #If Win64 Then Private Declare
PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal
lpWindowName As String) As LongPtr #Else Private Declare Function
FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long #End If
Option C – Virtualisation Si la
réécriture est trop lourde, exécuter le programme original dans une
machine virtuelle 32 bits ou via DOSBox.
Cela ne convertit pas le code, mais
permet de continuer à l’utiliser.
4 - Étapes pratiques Inventorier
toutes les fonctions API et dépendances.
Remplacer les types incompatibles
(Long → LongPtr, Integer → Long si nécessaire).
Ajouter PtrSafe à toutes les
déclarations API.
Tester chaque module après
conversion.
Moderniser progressivement
l’interface et la logique.
Conseil : Si ton code VB-DOS est
volumineux, il peut être plus rentable de réécrire directement en
VB.NET ou C#, plutôt que de tenter une migration ligne par ligne.
Cela te donnera un code maintenable et compatible avec les systèmes
futurs.
Si tu veux, je peux te préparer un
plan de migration pas à pas avec un tableau de correspondance entre
les types et API VB-DOS et leurs équivalents 64 bits modernes.
Veux-tu que je te fasse ce tableau?
Peux-tu expliquer plus sur les types
de données?
Quelles sont les meilleures pratiques
pour porter le code?
Comment créer un plan de migration
étape par étape?
|