IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 2.0] Probleme de callback


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 65
    Par défaut [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 : 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 la déclaration de mon delegate en c# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public delegate void CallbackFunc(String message);
    Voila le code de ma methode :
    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);
                }
     }
    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
    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.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 65
    Par défaut
    Bon j'ai trouvé la reponse tout seul :
    il suffit de rajouter devant la declaration du delegate cette ligne (valide seulement a partir du framework 2.0 semble-t-il) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
    public delegate void CallbackFunc(String message);
    Voila voila...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec CallBack/Communication avec le service
    Par Seth77 dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 19/06/2012, 23h03
  2. [Débutant] Probleme de callback avec un pushbutton
    Par iiyama10 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 18/05/2010, 15h34
  3. [tuto Chatez avec WCF] probleme de callback en DuplexChannel
    Par giova_fr dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 12/01/2010, 15h43
  4. Réponses: 8
    Dernier message: 01/06/2007, 00h13
  5. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo