Bonjour à tous !

Passons directement au vif du sujet qui dure depuis presque 2 jours. Je tente de passer un tableau de structure à une DLL écrite en C (que je peux débugger, mais pas modifier).
La structure ressemble à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
    [StructLayout(LayoutKind.Sequential)]
    public struct MaStructure
    {
        public bool unBool;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = NAME_MAX_SIZE)]
        public byte[] name;
        public int nbr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUMBER)]
        public int[] listID;
    }
La fonction de la DLL prendre en paramètre un MaStructure* (pour le tableau).

Le premier souci que j'ai obtenu est qu'il ne peut pas prendre de pointeur sur un type managé. J'ai donc voulu faire du Marshalling pour récupérer des pointeurs non managé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
IntPtr ptrList = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MaStructure)) * nbrElements);
Marshal.StructureToPtr(mesElements, ptrList, false);
Le second souci arrive enfin ! En débuggant, lorsque j'exécute le StructureToPtr() mon thread est killé et aucune erreur n'apparait.

Quelqu'un aurait-il une idée ?

Merci de votre attention.