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); |
Partager