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 :

Utilisation fonctions callback


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 18
    Par défaut Utilisation fonctions callback
    Bonjour a tous,

    Je suis actuellement confronte a un probleme de fonction callback.
    J utilise une librairie pour controler un peripherique. Dans celle-ci, il y a une fonction dont la declaration est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef void (WINAPI *NOTIFICATION_CALLBACK) (HANDLE cyDevice, DWORD dwNotify, DWORD dwUser);
    // cyDevice = Handle to device triggering callback
    // dwNotify = Reason for callback 
    // dwUser = User-defined parameter 
    // Subscribe for event notifications such as ready-to-read
    // Only one subscriber callback per device
    // Returns OK or an error code
    DWORD SubscribeNotifications
    (
    	HANDLE cyDevice, // Handle obtained from Open()
    	NOTIFICATION_CALLBACK callback, // Pointer-to-function for callback
    	DWORD dwUser // User-defined parameter to pass to callback
    );
    Je cherche a utiliser la fonction SubscribeNotifications dans mon programme c++ mais je ne connais pas grand chose aux fonctions callback.
    Pour cela, je cree une fonction telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void WINAPI OnUser(HANDLE hanReader, DWORD dwNotify, DWORD dwUser)
    {
    	// mon code
    }
    Et par la suite, dans mon main, je fais appel a ma fonction Subscribe_notifications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NOTIFICATION_CALLBACK callback;
    callback = (NOTIFICATION_CALLBACK)OnUser;
    DWORD dwUser;
    cout << "Error Code sub notif " << SubscribeNotifications(hanReader,callback,dwUser) << endl;
    Logiquement, a chaque evenement sur mon peripherique, la fonction OnUser devrait s executer (en tout cas c est mon but) mais ce n est pas le cas.. Je ne sais pas si c est moi qui ne comprends pas grand chose aux callback (c est bien possible) mais j aimerais bien savoir que faire pour corriger mon erreur svp.

    Merci d avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    A priori ça devrait fonctionner. Tu es sûr que ça ne peut pas venir d'aillleurs ? Peut-être que ta bibliothèque est mal paramétrée ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 18
    Par défaut
    Avec le peripherique que j utilise, il y a la librairie et un soft. J aurais bien aime avoir les sources du soft car la fonctionnalite que je veux est implementee par le soft mais je n arrive pas a la refaire avec la librairie..

    Est-il possible que cela vienne du fait que la fonction OnUser et la fonction Main sont dans le meme .cpp ?

    Je me prends la tete dessus depuis un petit moment et je ne vois pas quoi faire

    Merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Est-il possible que cela vienne du fait que la fonction OnUser et la fonction Main sont dans le meme .cpp ?
    Non, rien à voir.
    De toute façon il n'y a rien de compliqué au niveau de la callback : ta bibliothèque veut que tu lui passes une fonction, tu le fais : celle-ci devrait être appelée automatiquement.

    Par contre tu devrais retirer le transtypage de ta fonction, ça ne fait que masquer une potentielle incompatibilité entre les prototypes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SubscribeNotifications(hanReader, &OnUser, dwUser)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 18
    Par défaut
    J ai essaye mais cela ne marche toujours pas..
    Dans leur soft, le periph renvoit une donnee dans le buffer clavier qui est automatiquement copiee dans un champ de le fenetre active (si possible)
    Je pensais que juste le fait se faire SubscribeNotification me renvoyait cette valeur.. Mais comme cela ne marchait pas j ai pense que cela venait du fait que je devais implementer cela dans ma fonction OnUser.
    Or, apres plusieurs tests, il semble que la fonction OnUser n est jamais utilisee.. donc je ne sais pas..

    Je vois peut etre un autre probleme : la communication avec le peripherique se fait au moyen de commandes, mais n est pas permanente. Je lance mon programme (le main) et donc la fct SubscribeNotif et a la fin du main, le programme termine (appli console) et la communication aussi.
    Theoriquement est il possible que lors de l occurence de l evenement, le periph aille executer la fonction de mon programme (alors que le programme est termine)?

Discussions similaires

  1. utilisation de apply avec une fonction callback
    Par r-zo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/08/2010, 10h16
  2. comment utiliser le callback de la fonction animate()
    Par atjtwooo dans le forum jQuery
    Réponses: 1
    Dernier message: 07/11/2009, 21h35
  3. Réponses: 0
    Dernier message: 22/07/2008, 17h47
  4. Utilisation Fonctions Callback
    Par N0euX dans le forum Windows
    Réponses: 7
    Dernier message: 26/07/2007, 12h23
  5. Utilisation de fonction callback
    Par occor dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 16/03/2007, 22h15

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