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