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

GTK+ avec C & C++ Discussion :

Gtk: problème pour passer une structure en paramètres


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Gtk: problème pour passer une structure en paramètres
    Bonjour,
    je souhaite créer un programme pour enregister des donnes.
    Comme je dois enregistrer des données venant des trois GtkWidget différents, et que cet enregistrement est généré par un click de bouton, je voudrais faire une structure, que je passe en paramètre du signal_connect. J'ai trois procédures enregister (1,2et3) différentes, qui sont appelées par la fonction Save, reliée au signal_connect.
    Ca ne veut pas lancer le programme... snif...
    Pouvez-voux m'aider?

    Bonne soirée!

    Voilà mon code:
    [résolu]

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je le dit au moins trois fois par jour sur ce forum, ceci n'est pas une signature valide d'un callback:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Save(GtkWidget * Bouton1, struct coord *Donnees)
    Chaque signaux de chaque widgets possèdent une signature qu'il est bon de respecter si vous ne voulez pas avoir de comportement indéterminé ou des transmissions éronées d'arguments, etc... Ton callback serait plus juste sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Save(GtkWidget * Bouton1, gpointer data)
    Il faut consulter la documentation officiel du widget concerné et voir les signaux et donc en même la signature propre à chacun de ces signaux !

    Pour ton problème majeur, si déclare dans le main un pointeur sur ta structure mais je n'ai pas vu à quel moment tu alloues un espace mémoire pour celui-ci et de plus tu passes en dernier argument à g_signal_connect l'adresse du pointeur ce qui n'est pas correcte du tout.

    Au choix, soit tu déclare vraiment un pointeur sur ta structure dont tu passes "le pointeur" à g_signal_connect mais dans ce cas avant toute utilisation de ce pointeur, il faut allouer un espace mémoire valide avec g_malloc. Deuxième solution, tu déclares uniquement une variable du type de ta structure que tu peux utiliser donc directement et dont tu passes "l'adresse" à la fonction g_signal_connect !

    Voilà, j'espère avoir pû t'aider, fait les modifications qui s'impose et reviens en cas de problème ou pose des questions sur ce que tu ne sais ou comprend pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Bonjour!
    merci de ta réponse!
    Je ne comprends pas ce que signifie le gpointer data.
    qu'est ce que data? Où me sert-il dans le sous-programme?
    bonne soirée!

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par C_Chaou
    Bonjour!
    merci de ta réponse!
    Je ne comprends pas ce que signifie le gpointer data.
    qu'est ce que data? Où me sert-il dans le sous-programme?
    bonne soirée!
    Il faut lire les tutoriels, tout est marqué dedans ! Le type gpointer est en fait équivalent à void* tout simplement. Le nom de l'argument on s'enfout, ca peut être n'importe quoi mais il convient d'utiliser tout de même le bon type.

    Donc ici tu as un pointeur générique. Admettons que tu passes l'adresse d'une structure en dernier paramètre à la fonction g_signal_connect, celui-ci sera alors transmit dans l'argument data de ton callback. Pour récupérer les données de cet argument, il faut le faire mais dans le bon type soit par exemple, si j'ai une structure qui se nomme my_st on la récupère ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void cb_clicked (GtkWidget * wid, gpointer data)
    {
       my_st * st = data;
       ...
    }
    Donc là tu as récupèré un pointeur sur la structure passée dans le pointeur générique ! Pour d'avantage de détails je te suggère de lire des cours sur le C et essentiellement sur le passage de pointeurs et adresses en argument à des fonctions et pourquoi aussi sur la généricité : http://rperrot.developpez.com/articles/c/genericite/

Discussions similaires

  1. [AC-2003] Requête SQL : problème pour passer une date
    Par phoon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/11/2009, 07h29
  2. Réponses: 0
    Dernier message: 24/02/2009, 04h36
  3. [Zend_Session] Problème pour passer une valeur
    Par yosraisi dans le forum Autres composants
    Réponses: 2
    Dernier message: 05/05/2008, 11h27
  4. Problême pour passer une variable dans un SelectCommand
    Par Thetonio007 dans le forum ASP.NET
    Réponses: 12
    Dernier message: 26/06/2007, 14h37
  5. [JSP] Problème pour passer un array comme paramètre
    Par MxPx_23 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/06/2006, 17h13

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