Bonjour,
Voila mon probleme :
J'utilise une dll écrite en c++ dans mon application c#. Cette dll utilise un callback. Voila le prototype de la fonction callback en c++ :
Voila la déclaration de mon delegate en c# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // Definition de la callback pour les messages spontanées typedef void f_App_ProcessSpontaneous(char *message);
Voila le code de ma methode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public delegate void CallbackFunc(String message);
Voila l'ensemble de mon petit programme de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public static void TheCallBackFunct(String message) { if (message == null) { Console.WriteLine("\nCallback called with param null"); } else { Console.WriteLine("\nCallback called with param {0}",message); } }
Lorsque j'execute ce petit programme de test tout fonctionne correctement sauf lorsqu'il passe dans la methode "TheCallBackFunct", voila l'erreur qui apparaît :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public delegate void CallbackFunc(String message); [DllImport("..\\..\\XXX.dll", CharSet = CharSet.Ansi)] static extern bool Connect( Byte Protocol, char ip, ushort Port, uint BaudRate, ushort ID, bool Mode, CallbackFunc funct ); [DllImport("..\\..\\XXX.dll", CharSet = CharSet.Ansi)] static extern Byte SendWait( ushort ID, string mess, StringBuilder Retbuf ); static void Main() { bool resu = false; Console.WriteLine("Resu avant : " + resu.ToString()); char caractNull = '\0'; // Creation de la fonction call back CallbackFunc callback = new CallbackFunc(TestsDLL.maClasse.TheCallBackFunct); resu = Connect(1, caractNull, 1, 19200, 0x00FF, false, callback); Console.WriteLine("Resu apres : " + resu.ToString()); if (resu) { Byte ret = 0x01; Console.WriteLine("Envoi de : DC"); StringBuilder messRecv = new StringBuilder(4096); ret = SendWait(0x00FF, "DC", messRecv); Console.WriteLine("Retour : " + messRecv.ToString()); Console.WriteLine("Erreur : " + ret); } Console.WriteLine("Fin..."); Console.ReadLine(); } public static void TheCallBackFunct(String message) { if (message == null) { Console.WriteLine("\nCallback called with param null"); } else { Console.WriteLine("\nCallback called with param {0}",message); } }
"The value of ESP was not properly saved across a function call. Thi is usually a result of calling a function declared whith one calling convention with a function declared with a different caling convention."
Qu'est-ce que je dois faire ???
Merci d'avance pour votre aide.
Partager