Bonjour à tous,
Je souhaite communiquer avec une dll. Une fonction de cette dll me renvoi une structure :
Dans c#:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct DLLStrucure { uint8 Valeur1; uint16 Valeur2; uint32 Valeur3; uint64 Valeur4; float Valeur5; } DLLStrucure ;
Cela fonctionne correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public struct MyStruct { public byte Valeur1; public UInt16 Valeur2; public int Valeur3; public UInt64 Valeur4; public float Valeur5; } [DllImport("TestSbg.dll")] public static extern MyStruct FunctionStruct();
Maintenant j'essaye de passer un tableau par la structure :
Dans la dll:
Dans mon programme c#:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct DLLStrucure { uint8 Valeur1[4]; uint16 Valeur2; uint32 Valeur3; uint64 Valeur4; float Valeur5; } DLLStrucure ;
Voici comment je déclare et appel la fonction de la dll:
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 public struct MyStruct { public byte[] Valeur1; public UInt16 Valeur2; public int Valeur3; public UInt64 Valeur4; public float Valeur5; public MyStruct(byte[] valeur1, UInt16 valeur2, int valeur3, UInt64 valeur4, float valeur5) { this.Valeur1 = valeur1; this.Valeur2 = valeur2; this.Valeur3 = valeur3; this.Valeur4 = valeur4; this.Valeur5 = valeur5; } public MyStruct(int taille) { this.Valeur1 = new byte[taille]; this.Valeur2 = new UInt16(); this.Valeur3 = new int(); this.Valeur4 = new UInt64(); this.Valeur5 = new float(); } }
Et la j'ai l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MyStruct TestStruct2 = new MyStruct(4); TestStruct2 = FunctionStruct();Quelqu'un aurait une idée d'ou vient le problème?La signature du type de cette méthode n'est pas compatible avec PInvoke.
D'avance Merci.![]()
Partager