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 :

Récupérer les élements d'une structure ...


Sujet :

GTK+ avec C & C++

  1. #1
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par d�faut Récupérer les élements d'une structure ...
    Bonjour,

    J'ai cr�� une structure, dont j'alloue dynamiquement un pointeur.
    Cette structure, je la place dans une GList, mais apres, je n'arrive pas � acceder � un �lement de mon pointeur (qui est la structure mentionn�e plus haut) � partir de la GList !

    Bon, grossi�rement :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    typedef struct
    {
       GtkWidget *p_tab_label;
     
       GtkWidget *p_scrollbar;
       GtkWidget *p_scrollbar_2;
     
       GtkWidget *p_text_view;
     
       GtkWidget *p_list_view;
       GtkListStore *p_list_store;
       GtkTreeViewColumn *p_column;
       GtkCellRenderer *p_renderer;
     
       GtkWidget *p_hpaned;
    }
    _tab_chan_s;
     
    _tab_chan_s *p_tab_chan_s;
    Je vous passe l'allocation en memoire
    Voici ma fonction (qui n'est pas finie):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void cb_send_message (GtkWidget *p_widget, gpointer p_data)
    {
       const gchar *p_msg = NULL;
       gint current_page = 0;
       GtkTextBuffer *p_buffer = NULL;
       GtkTextIter i_end;
       gpointer p_st_data = NULL;
     
     
       /* Recupere le texte contenu dans la zone de saisie */
       p_msg = gtk_entry_get_text (GTK_ENTRY (main_win_s->p_entry));
     
       /* Si le tampon est vide alors la zone est vide. Affichage d'un
          message d'information */
       if (strcmp (p_msg, EMPTY_LINE) == 0)
       {
          dlg_show_message (
             GTK_WINDOW (main_win_s->p_window),
             GTK_MESSAGE_INFO,
             GTK_BUTTONS_OK,
             "La zone de saisie est vide !");
       }
       else
       {
          /* Recupere la page courrante */
          current_page = gtk_notebook_get_current_page (
                            GTK_NOTEBOOK (main_win_s->p_notebook));
     
     
          p_st_data = g_list_nth_data (p_tab_chan_list, current_page);
     
          p_buffer = gtk_text_view_get_buffer ((_tab_chan_s)p_st_data->p_text_view);
       }
    }
    mais je n'arrive pas a acceder aux widgets contenu dans ma structure ajout�e ainsi dans la GList:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    g_list_append (p_tab_chan_list, p_tab_chan_s);
    J'ai ceci en message d'erreur:

    107 C:\Documents and Settings\CSoldier\Mes documents\Sauvegardes\Programmation\MOPIC\mopic_callback.c [Warning] dereferencing `void *' pointer
    107 C:\Documents and Settings\CSoldier\Mes documents\Sauvegardes\Programmation\MOPIC\mopic_callback.c request for member `p_text_view' in something not a structure or union
    Voil� toute l'histoire, si quelqu'un pouvait me mettre sur la voie ce serait super !

    Merci d'avance
    Mon Site
    Ma biblioth�que de gestion des cha�nes de caract�res en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne r�pond � aucune question technique par MP, merci d'avance !

  2. #2
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut Re: [GTK] R�cup�rer les �lements d'une structure ...
    Citation Envoy� par CSoldier
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void cb_send_message (GtkWidget *p_widget, gpointer p_data)
    {
       const gchar *p_msg = NULL;
       gint current_page = 0;
       GtkTextBuffer *p_buffer = NULL;
       GtkTextIter i_end;
       gpointer p_st_data = NULL;
     
     
       /* Recupere le texte contenu dans la zone de saisie */
       p_msg = gtk_entry_get_text (GTK_ENTRY (main_win_s->p_entry));
     
       /* Si le tampon est vide alors la zone est vide. Affichage d'un
          message d'information */
       if (strcmp (p_msg, EMPTY_LINE) == 0)
       {
          dlg_show_message (
             GTK_WINDOW (main_win_s->p_window),
             GTK_MESSAGE_INFO,
             GTK_BUTTONS_OK,
             "La zone de saisie est vide !");
       }
       else
       {
          /* Recupere la page courrante */
          current_page = gtk_notebook_get_current_page (
                            GTK_NOTEBOOK (main_win_s->p_notebook));
     
     
          p_st_data = g_list_nth_data (p_tab_chan_list, current_page);
     
          p_buffer = gtk_text_view_get_buffer ((_tab_chan_s)p_st_data->p_text_view);
       }
    }
    mais je n'arrive pas a acceder aux widgets contenu dans ma structure ajout�e ainsi dans la GList:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    g_list_append (p_tab_chan_list, p_tab_chan_s);
    J'ai ceci en message d'erreur:

    107 C:\Documents and Settings\CSoldier\Mes documents\Sauvegardes\Programmation\MOPIC\mopic_callback.c [Warning] dereferencing `void *' pointer
    107 C:\Documents and Settings\CSoldier\Mes documents\Sauvegardes\Programmation\MOPIC\mopic_callback.c request for member `p_text_view' in something not a structure or union
    Voil� toute l'histoire, si quelqu'un pouvait me mettre sur la voie ce serait super !
    Le principe g�n�ral pour r�cup�rer des donn�es � partir d'un pointeur anonyme (pour cause de callback, par exemple...) est de caster dans le bon type ou d'utiliser un pointeur local du bon type.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void f (void *p)
    {
       printf ("n = %d\n", *((int*)p)); /* horrible! */ 
     
       /* ou */
     
       int *pi = p;
     
       if (pi != NULL)
       {
          printf ("n = %d\n", *pi);
       }
    }
    Evidemment c'est au programmeur de savoir le type de la variable dont il a pass� l'adresse � la fonction qui appellera un jour le callback. C'est du 'sans filet', et il vaut mieux �tre r�veill�.

    D�tails sur les callbacks avec variable anonyme ici :

    http://emmanuel-delahaye.developpez.com/complog.htm

    (GTK est un exemple parfait de composant logiciel).

  3. #3
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par d�faut
    Ca marche au poil ! Je te remercie pour cette info, la prochaine fois je vais directement voir ton site
    Mon Site
    Ma biblioth�que de gestion des cha�nes de caract�res en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne r�pond � aucune question technique par MP, merci d'avance !

  4. #4
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut
    Citation Envoy� par CSoldier
    Ca marche au poil ! Je te remercie pour cette info, la prochaine fois je vais directement voir ton site
    Je suis quand m�me un peu �tonn�. Tu n'avais jamais utilis� qsort() ?

  5. #5
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par d�faut
    Heu pourquoi tu me parles de qsort ? Je ne vois pas le rapport ! Mais sinon, bah non, je n'ai pas vraiment utilis� cette fonction, sauf peut etre � mes d�but en C !
    Mon Site
    Ma biblioth�que de gestion des cha�nes de caract�res en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne r�pond � aucune question technique par MP, merci d'avance !

  6. #6
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut
    Citation Envoy� par CSoldier
    Heu pourquoi tu me parles de qsort ? Je ne vois pas le rapport !
    Parce que avec qsort(), on a un magnifique callback
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int mycompare(void const *pa, void const *pb);
    qui oblige d�j� au genre de gymnastique expos� ci-dessus... Normalement, si on connait le C, on connait d�j� ces manips !

  7. #7
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par d�faut
    Ha ok, non moi les callback j'ai directement commenc� avec GTK en fait !
    Mon Site
    Ma biblioth�que de gestion des cha�nes de caract�res en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne r�pond � aucune question technique par MP, merci d'avance !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Erreur � l'appel d'un �lement d'une structure
    Par diego45 dans le forum MATLAB
    R�ponses: 1
    Dernier message: 25/09/2014, 11h42
  2. R�ponses: 2
    Dernier message: 03/07/2014, 13h06
  3. Adresse d'un �lement d'une structure
    Par edgarjacobs dans le forum C
    R�ponses: 6
    Dernier message: 18/12/2011, 19h01
  4. r�cup�rer les �lements d'une liste (<select>)
    Par ferrero dans le forum Struts 1
    R�ponses: 4
    Dernier message: 12/06/2007, 13h55
  5. R�ponses: 5
    Dernier message: 01/03/2006, 11h34

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