Lire un fichier binaire VB6

I ) Principe :

La librairie VB6Binary permet d’extraire le contenu d’un fichier binaire VB6 et de l’insérer dans les différents attributs d’un objet Java.
Elle permet également de transformer un objet Java en binaire VB6.
Cela peut être fortement utile dans de nombreux cas tel que :
* Migration d’une partie de vos outils VB6 en Java tout en conservant vos fichiers binaires existants
* Communication entre un outil VB6 existant et un nouvel outil développé en Java

II ) Fonctionnement :

En Java, créez des classes héritant de « VB6Binary » dont la structure des attributs correspond à celle de vos types VB6.
Attention, les types VB6 et Java ne disposent pas forcément du même nom ! Voici un tableau récapitulatif des équivalences :

VB6 Java
Not supported byte
Byte Not supported
Character char
Integer short
Long int
Not supported long
Single float
Double double
String java.lang.String
Boolean boolean
Variant com.ms.com.Variant
object com.ms.com.IUnknown
Date com.ms.com.Variant
Currency com.ms.com.Variant

Une fois vos classes mises en places, créez en une instance et appelez la méthode « deserialize » en lui fournissant un buffer ou le nom du fichier binaire correspondant.

III ) A noter :

-Cette librairie a été développée au fur et à mesure des besoins de lecture de typage.
Ainsi, il se peut que des types présents dans vos fichiers binaires ne soient pas encore implantés dans la librairie.
Si tel était le cas, n’hésitez pas à me contacter pour faire évoluer cette dernière.

-Si la structure de vos objets Java ne correspond pas exactement à vos types VB6, une exception aura lieu.
Pour obtenir une trace détaillée durant l’exécution de la librairie, utilisez la ligne Java suivante : MessageLogger.set(Level.INFO);

-Des exemples d’utilisation se trouvent dans le dossier « Test_Project-V.X.X » (où X.X représente le numéro de version).
Vous y trouverez :
Sample_1 :
* Un projet VB6 permettant de créer un fichier « npc »
* Un projet Java permettant d’afficher le contenu d’un fichier « npc »

Sample_2 :
* Un projet Java permettant d’afficher un fichier binaire complexe, désérializé en deux étapes.

Sample_3 :
* Un projet permettant de sérializer un objet Java vers du Binaire VB6 (peut être lu par l’exécutable VB6 Sample 1)

Sample_4 :
* Un projet de sérialization/désérialization pour tous les typages disponibles (Tests étendus)

VB6Binary-V.1.4.zip234 downloads

Développeur : Birmania – BRULTET Antoine

Évolutions :

  • V1.0 : Version initiale
  • V1.1 : Le type « double » est désormais pris en charge
  • V1.2 : Correction et amélioration du traitement des tableaux multi-dimensionnels ; Possibilité de changer le niveau des logs affichés ; Possibilité d’extraire le contenu d’un binaire en plusieurs phases
  • V1.3 : Possibilité de générer un binaire VB6 à partir d’un objet Java (Sérialization) ; Politique de gestion des exceptions redéfinie
  • V1.4 : Possibilité de créer un « InputBuffer » VB6 à partir de n’importe quel java.io.InputStream ; Vous avez désormais la responsabilité de fermer (Méthode « close ») vos instances d’ « InputBuffer »
3 commentaires pour “Lire un fichier binaire VB6
  1. Jason dit :

    I am trying to read a file that has variable amounts of data, i.e., if I have x,y,w,h and then total as options in my structure, how do I implement each x y w h based on that total?

    Your examples show us doing single ints, strings and such but if I have variable objects how does this work?

    I see your Trait class, but I’m not sure exactly what that is showing. Your example produces 2 array elements, but when I tried it both on my fixed array string, and these variable objects I get null.

    I’m a bit confused mainly because I don’t know VB, and just Java.

    Thank you for your time.

    • Birmania dit :

      Hi Jason,

      The basic idea is to implement the attributes of your Java class as similar as your VB6 user data type.
      I may miss some aspect of your problem but if you have x,y,w,h and total as members of your VB6 structure, you must create a Java class containing 5 attributes where types attend to be « similar » as the VB6 ones. (See table in the article for correspondence)

      As regards the variable objects, even if you do not use a member of a structure, VB6 serialization always consume disk space in the VB6 binary file. Despite you use « Variant » VB6 type which is not tested/supported yet.

      The example provided in the package is quite simple : You’ve got a VB6 graphical application where you can set some values to a « character object » and convert it to a VB6 binary file. The character is defined as the following :
      *name (String)
      *strength (Integer)
      *traits (Used defined type)
      *etc…
      Then, you just have to run the Java Main in order to read the corresponding binary file and retrieve all data you put through the VB6 application.

      In any case, I just installed a new feature enabling you to attach some contents with your comments on Biome404.
      Would you send me a sample with your « null » values and variable objects ?

      [EDIT : After some out-of-here private discuss, Jason's user requirements bring us library versions 1.1 to 1.4]

  2. Gion dit :

    Hi Antoine,
    thank you for your class, it works perfectly with numbers and strings with ascii chars, also in complex structure.

    I have only one problem: I can’t read strings with extended ascii chars (ù,è,é,ò,à,…).
    The result is that the extended ascii chars are replaced with the unicode char 65533 « � »

    Do you have any idea how i can solve this problem?

    Thank you for you reply.

Répondre à Gion Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>