Bonsoir,
Je suis en plein programmation, et je me surpris que je perd la tête de ma liste lorsque je la traite à l'intérieur d'une fonction du callback.
Comment pourrai-je retourner ma liste s'il vous plais;
Bonsoir,
Je suis en plein programmation, et je me surpris que je perd la tête de ma liste lorsque je la traite à l'intérieur d'une fonction du callback.
Comment pourrai-je retourner ma liste s'il vous plais;
Bonjour,
ça va être compliqué de trouver où tu t'es trompé si tu ne fournis pas de code pour essayer de comprendre ce que tu as fait...
à mon avis c'est une liste GLib
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void my_callback (void* data, void* user_data) { GList* list = (GList*)user_data; // reste du code ici; } ... GList* list = NULL; list = g_list_append (list, "data"); g_list_foreach (my_callback, list);
Tu peux par exemple définir "user_data" comme une structure avec le pointeur vers la liste comme membre.
Code C : Sélectionner tout - Visualiser dans une fenêtre à part typedef struct Data { GList* list; };
ou passer directement la liste ? (je dis ça mais Vala génère automatiquement des structs C de ce style, donc c'est que ce doit être mieux)![]()
Il faut utiliser un pointeur double, puisqu'on ne peut pas faire un return du pointeur vers la nouvelle tête de la liste à partir de la callback.
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 ma_fonction (...) { GList * list = NULL; list = g_list_append(list, "test"); g_signal_connect(mon_widget, G_CALLBACK(ma_callback), ..., &list); /* ici on passe l'adresse de list et pas list lui même */ } ... ma_callback (..., gpointer user_data) { GList **ptr_to_list = user_data; g_assert (ptr_to_list != NULL); GList *list = *ptr_to_list; /* on ajoute, supprime des éléments */ list = g_list_append(list, "dans ma callback"); /* avant de sortir, on remet à jour l'endroit où se trouve la tête de la liste */ *ptr_to_list = list; }
Partager