Lecture en VB d'un fichier cree en C

Résolu
Lolobreizh Messages postés 6 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 7 mars 2005 - 3 févr. 2005 à 16:33
Lolobreizh Messages postés 6 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 7 mars 2005 - 3 févr. 2005 à 19:23
Bonjour,
Ma question est à mi-chemin entre VB et C :
Je crée un fichier en C qui est la sauvegarde d'une structure TYPE2 définie comme suit :
typedef struct tagTYPE1 {
char chp1[10];
char chp2[10];
} TYPE1, *LPTYPE1;


typedef struct tagTYPE2 {
int nbType1;
TYPE1 arrayType1[10];
} TYPE2, *LPTYPE2;


int main() {
FILE* fic;
TYPE2 str;
/* Apres initialisation de str */
fic = fopen("C:\toto.txt", "w");
fwrite(str, sizeof(TYPE2),1, fic);
fclose(fic);
}

J'essaie ensuite de lire ce fichier en VB en mode binaire :

type TYPE1
chp1 as String
chp2 as String
end type


type TYPE2
nbType1 as Integer
arrayType1(10) as TYPE1
end type


sub test()
dim canal as integer
dim str as TYPE2
canal = FreeFile
open "c:\toto.txt" as canal
get canal, filelen("c:\toto.txt") - 1, str
msgbox str.nbType1
end sub

Je n'ai pas d'erreur mais str est toujours vide.
Avez-vous une idée de ce qui peut se passer ?
Merci d'avance.

2 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
3 févr. 2005 à 16:53
Oui ! C'est normal ! Ton souci vient du fait que VB et C ne stocke pas leur chaine de la même manière en mémoire ! Vb stocke devant la chaine la longueur de celle-ci en mémoire, alors que C stocke directement la chaine et ajoute un caractère de code ascii zéro à la fin !! Donc une fois sur disque , ca merdouille si tu passe du C écrivain au VB lecteur (l'inverse sera autant merdouillant d'ailleur !!)
Le plus simple serait de lire en vB un tableau de byte de 201 bytes de long (la taille en byte de ta structure écrite par le C si je ne m'abuse) et de faire ensuite des CopyMemory depuis ton tableau de byte vers ton type VB !
Bonne chance, mon vieux !!

Christophe R
3
Lolobreizh Messages postés 6 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 7 mars 2005
3 févr. 2005 à 19:23
Merci pour ta réponse.

Je vais tester ça.

Pour pallier à ce problème, j'avais utilisé un fichier plat formatté avec un champ par ligne.



Lolobreizh
0
Rejoignez-nous