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 :

passage d'un pointeur de fonction en argument d'une callback


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut passage d'un pointeur de fonction en argument d'une callback
    Bonjour,

    J'ai un souci de syntaxe en C sous Linux :

    une création de dialog box qui passe en paramètre une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Boolean fct();
    ...
    TrafficDialog = (Widget)XmCreateQuestionDialog(widget, "ApplyTrafficMsg", fct, 0);
    Dans la callback, mon souci est de récupérer l'argument client data avec le bon type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ApplyTrafficMsg(Widget widget, XtPointer client_data, XtPointer call_data)
    {
    	Boolean	(*pf_Apply_Traffic) ();
    	pf_Apply_Traffic = (Boolean) client_data;
    }
    Ce code me génére les warnings suivants:
    Traffic/ANA_TOOL_Traffic_Dialog.c:85: warning: cast from pointer to integer of different size
    Traffic/ANA_TOOL_Traffic_Dialog.c:85: warning: assignment makes pointer from integer without a cast

    Quelqu'un a t'il une suggestion ?
    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Utilise un typedef:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef Boolean (*BOOLEANPROC)();
     
    void ApplyTrafficMsg(Widget widget, XtPointer client_data, XtPointer call_data)
    {
    	BOOLEANPROC pf_Apply_Traffic = (BOOLEANPROC)client_data;
    }
    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 éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Oui merci, c'est vrai.

    Finalement, le cast suivant marche aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pf_Apply_Traffic = (Boolean (*)()) client_data;

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

Discussions similaires

  1. Fonction en argument d'une autre fonction
    Par bonjour69 dans le forum Fortran
    Réponses: 2
    Dernier message: 12/03/2008, 16h17
  2. [scipy] Séries mathématiques - fonction comme argument d'une autre
    Par sebsainte dans le forum Calcul scientifique
    Réponses: 6
    Dernier message: 20/09/2007, 00h59
  3. Réponses: 8
    Dernier message: 05/07/2007, 13h44
  4. entrer une fonction en argument d'une autre fonction
    Par arno78 dans le forum VB 6 et antérieur
    Réponses: 22
    Dernier message: 07/09/2006, 14h29
  5. Réponses: 4
    Dernier message: 01/12/2005, 12h33

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