ECRIRE OU LIRE UNE STRUCTURE DANS UN FICHIER BINAIRE

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 5 avril 2008 à 11:36
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 - 12 janv. 2009 à 21:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46290-ecrire-ou-lire-une-structure-dans-un-fichier-binaire

BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
12 janv. 2009 à 21:09
J'oubliais la fonction d'appel :

Declare Function Lance Lib "USBLib" (ByVal hHandle As Integer, <MarshalAsAttribute(UnmanagedType.Struct)> ByRef pTransfer As DATA_ACQUISITION) As Integer
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
12 janv. 2009 à 21:04
Bonjour, petite question qui n'a rien a voir, enfin en partie quand même ...

J'essaye de faire la même chose et j'ai cette erreur :

<<Le type n'a pas pu être marshalé, car la longueur d'une instance de tableau incorporée ne correspond pas à la longueur déclarée dans la disposition.>>

EN VB6 :
Public Type DATA_ACQUISITION
Calibrage As Byte
Voie(3) As ACQUISITION_VOIE
Config As ACQUISITION_CONFIG
Trig As ACQUISITION_TRIG
End Type

EN VB.NET :
<StructLayout(LayoutKind.Sequential)> Public Structure DATA_ACQUISITION
Dim Calibrage As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=12)> Dim Voie() As ACQUISITION_VOIE
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Dim Config As ACQUISITION_CONFIG
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=7)> Dim Trig As ACQUISITION_TRIG
'----------------------------------------------------------
Public Sub Initialize()
ReDim Voie(3)
End Sub
End Structure

Dans les structure en VB6 j'ai des byte et des long que j'ai transformé en byte et integer pour VB.NET. Visiblement ce serait la declaratation de tableau de structure (--Voie()--) qui poserai problème. Enfin je crois.

Je pensais avoir compris "en partie" la marshalisation mais alors là je suis perdu ... Si vous avez une idée
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
12 avril 2008 à 17:59
Et on l'a toujours ... c'est vrai

Yop

Afyn
Navedac
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
11 avril 2008 à 23:12
Ouai je sais qu'on avait le probleme et on l'a toujours...
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
10 avril 2008 à 22:52
On avait le problème avec la structure MIDI (tu te souviens EB ?)
C'est pas simple en .NET

Yop
Afyn
Navedac
Le savoir faire des cancres du grand sud ...
istamkenitra Messages postés 42 Date d'inscription mardi 9 décembre 2003 Statut Membre Dernière intervention 21 mars 2009
8 avril 2008 à 13:25
Bonjour
pour Picpic10 : un lien qui traite la serialisation binaire d'un classe :
http://plasserre.developpez.com/v5-8.htm

sinon il y en a plusieurs sur le net... avec google ..celui la est le premier que j'ai trouver ...j'espere qu'il te sera utile
linalina84 Messages postés 2 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 7 avril 2008
7 avril 2008 à 19:42
je préfère qu'il soit écrit en java
Picpic10 Messages postés 7 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 12 mai 2009
7 avril 2008 à 15:13
Istamkenitra, aurais tu un exemple qui marche avec la serialization binaire? J'ai essaye mais rien a faire... je n'y arrive pas. Et si ca resoud le probleme de la declaration des string et rend ceci plus facile, je prends ;)

3 soirs d'essais et de recherche sur le net juste pour enregistrer une structure... C'est la seule methode que j'ai reussi a faire marcher. Mais il ne faut pas exclure que je soit just un gros boulet ^^

Ps: merci pour les commentaires et pardon pour l'absence d'accent sur le message (clavier anglais).
Profil bloqué
5 avril 2008 à 22:04
Pour répondre à EBartSoft avec un tableau de bytes et une structure à l'intérieur d'une structure

<StructLayout(LayoutKind.Sequential)> Public Structure CDROM_TOC
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Dim Length() As Byte
Dim FirstTrack As Byte
Dim LastTrack As Byte
<MarshalAs(UnmanagedType.ByValArray, sizeConst:=100)> Dim TrackData() As TRACK_DATA
End Structure

C'est pas de la tarte !!!! Mais faut faire avec
istamkenitra Messages postés 42 Date d'inscription mardi 9 décembre 2003 Statut Membre Dernière intervention 21 mars 2009
5 avril 2008 à 18:26
bon exemple..mais personnellement je trouve que c'est un peu compliqué (coté types de données)!! on peut faire mieux avec la serialization (xml ou binaire)
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
5 avril 2008 à 11:36
Huhuh et comment ça ce passe quand c'est un tableau de "byte" a dimension fixe ?
Rejoignez-nous