[C# 2.0] Probleme de callback
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++ :
Code:
1 2
| // Definition de la callback pour les messages spontanées
typedef void f_App_ProcessSpontaneous(char *message); |
Voila la déclaration de mon delegate en c# :
Code:
public delegate void CallbackFunc(String message);
Voila le code de ma methode :
Code:
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);
}
} |
Voila l'ensemble de mon petit programme de test :
Code:
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);
}
} |
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 :
"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.