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

Windows Discussion :

Utilisation Fonctions Callback


Sujet :

Windows

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
    14
    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
    5
    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
    5
    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
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Déjà, si tu dois faire un cast sur le pointeur de fonction, c'est qu'elle ne correspond pas au type ---> Très mauvais.

    Pour le reste, je ne connais pas les notifications de périphériques, et encore moins la fonction SubscribeNotifications(), donc je ne peux pas t'aider sur ce plan-là...
    PS: dwUser est-il initialisé dans ton code ? Car ici, il ne l'est pas...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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
    je fais un cast sur le pointeur car je ne sais pas creer une fonction de type "void typedef void (WINAPI *NOTIFICATION_CALLBACK) (HANDLE cyDevice, DWORD dwNotify, DWORD dwUser);" ..
    je veux bien ne pas faire de cast si on me dit comment faire une fonction de ce type..

    j ai remplace dwUser par 0, car en fait il s agit dun parametre que lon peut passer a la fonction de callback mais je n en ai pas besoin c est pour cela que je ne lavais pas initialise..

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    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
    }
    Si cette fonction n'est pas dans une classe C++, aucun cast n'est nécessaire.

    PS: Quelle compilo (version comprise) utilises-tu ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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
    la fonction OnUser est dans la meme source .cpp que le main.

    j utilise actuellement Microsoft Visual Studio 2005.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    As-tu un warning ou une erreur si tu essaies de mettre directement callback = OnUser; ?
    Si oui, poste le warning ou l'erreur correspondant(e).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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 C++
    Réponses: 4
    Dernier message: 23/07/2007, 17h28
  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