Bonjour,
Je me retrouve face un problème qui se mort la queue quand j'essaye de trouver la solution.
J'ai un structure contenant un tableau de structure:
Depuis un fichier binaire contenant les valeurs de la struture, je les convertis en tableau de bytes: (binaire --> ArrayBytes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public struct Header_t{ public UInt16 usSignature; public UInt16 usVersion;} public struct Definition_Struct{ public UInt16 Var1; public static Header_t[] tab_header1 = new Header_t[13]; public UInt16 Var2; public static Header_t[] tab_header2 = new Header_t[4];} Definition_Struct MaStruct;
Ayant mes données en brutes dans le tableau value, je les injecte dans ma structure en utilisant la méthode Marshall.PtrToStructure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 FileStream monFlux = new FileStream("fichierbinaire.bin", FileMode.OpenOrCreate); BinaryReader Reader = new BinaryReader(monFlux); Byte[] value = new Byte[monFlux.Length]; value = Reader.ReadBytes(value.Length);
: (ArrayBytes --> MaStruct)
Cela fonctionne qu'à moitié, car seuls les variables non statiques sont remplies et les tableaux ne sont pas assignés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 GCHandle handle = GCHandle.Alloc(value, GCHandleType.Pinned); MaStruct = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(Definition_Struct)); handle.Free();
Cela vient du fait qu'ils soient en static, mais s'ils ne le sont pas, impossible de compiler.
Après voir essayer diverses possibilités (class au lieu de structure) je me retrouve bloquer.
Auriez vous idée de là où le bât blesse ??
Merci
Partager