Bonjour, je bute, je ne fais pas souvent du c#.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct typ_val_instant
        {
            Int32 ValConvCapt;
            Int32 ValPdsCapt;
            Byte EtatCapt;
        };
 
      [StructLayout(LayoutKind.Sequential, Pack = 1)]
      public struct SDO_Instant
      {
        public typ_val_instant[] Capteur;
      };
 
 
 
 
 
        if (TabSDOInstant.Capteur == null)
               TabSDOInstant.Capteur = new typ_val_instant[20];
            //Finsi
 
            /* Première méthode*/
            /*GCHandle handle = GCHandle.Alloc(SDO_ValPMnet.SDO_buffer, GCHandleType.Pinned);
            TabSDOInstant = (SDO_Instant)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(SDO_Instant));  
            handle.Free();*/
 
 
            int length = Marshal.SizeOf(TabSDOInstant);
            IntPtr ptr = Marshal.AllocHGlobal(length);
            Marshal.Copy(SDO_ValPMnet.SDO_buffer, 0, ptr, length);
            TabSDOInstant = (SDO_Instant)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement(SDO_ValPMnet.SDO_buffer, 0), TabSDOInstant.GetType());
            Marshal.FreeHGlobal(ptr);
au new c'est alloué mais sa repasse à null après le:
TabSDOInstant = null après l'affectation.
SDO_Buffer est un byte[] et j'aimerai le mettre dans TabSDOInstant qui est un Tableau de struct pour traiter mon buffer de reception dans une datagridview.


si vous voulez bien m'aidez

cdt


merci de vos réponses