Bonjour,
J'utilise une dll qui avec une fonction qui renvoie un pointeur sur un tableau de structure complexe (utilisant des float, int, ...)
Pour résumer voici un exemple de ce que je veux faire
En C:
Coté C# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 typedef struct { uint8 telfixe; float telPort; } MASTRUCTURETEL; MASTRUCTURETEL DLL_EXPORT * GetTabStructure() { TabmaStruct[1].telfixe = 128; TabmaStruct[1].telPort = -666.66; return &maStruct; }
Quand je lance le code j'ai cette erreur:
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 [StructLayout(LayoutKind.Sequential)] public class MaStructTelCSharp { public byte telFixe; public float telMobile; } [DllImport("SbgDriver.dll")] public static extern IntPtr GetTabStructure(); MaStructTelCSharp[] maStructureCSharp = new MaStructTelCSharp[2]; IntPtr tabUnmanaged = Marshal.AllocHGlobal(Marshal.SizeOf(maStructureCSharp[1]) * 2); tabUnmanaged = GetTabStructure(); Marshal.PtrToStructure(tabUnmanaged, maStructureCSharp);
La structure spécifiée doit être blittable ou avoir des informations de disposition. Nom du paramètre : structure
Je souhaite réussir mon exemple simple avant de m'attaquer à mon driver qui renvoie une structure beaucoup plus complexe. (de plus je n'ai pas accès au code de la dll finale).
Pourriez vous m'aider?
Partager