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 :
La fonction de la DLL prendre en paramètre un MaStructure* (pour le tableau).
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; }
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é :
Le second souci arrive enfin ! En débuggant, lorsque j'exécute le StructureToPtr() mon thread est killé et aucune erreur n'apparait.
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);
Quelqu'un aurait-il une idée ?
Merci de votre attention.
Partager