begin process at 2010 02 10 07:19:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

GUI

 > 

GTK Passage de pointeur impossible


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

GTK Passage de pointeur impossible

jeudi 8 mars 2007 à 12:00:33 | GTK Passage de pointeur impossible

neoTHGLF

Bonjour,

je développe actuellement une application sous windows avec Visual Studio 2005 en C avec une interface graphique. Pour développer l'interface graphique j'utilise GTK+.

Malheureusement je me confronte depuis 3 jours à un énorme problème que je n'arrive pas à résoudre et qui me parait absolument incroyable :
Voici en gros le probleme :
j'ai une fonction qui prends en paramètre un pointeur. Quand j'appelle cette fonction en lui passant un pointeur et que je récupère ce pointeur à l'intérieur de la fonction, il ne pointe plus vers la même adresse !
Exemple :

int fonction(void *a)
{
    int *entier = (int*)a;

    printf("%p",a);

    return 0;
}

int main(int argc, char *argv)
{
    int *entier;
    entier = (int *)malloc(sizeof(int));


    printf("%p",entier);
   
    fonction(entier);

    return 0;
}
      
Donc nous voyons que ce programme imprime à l'écran 2 adresses. Normalement elle devraient être égales, malheureusement, dans MON programme ça n'est pas le cas !



Voici donc mon programme, celui ci est un peu plus compliqué :

#include <stdio.h>
#include <tchar.h>
#include <gtk/gtk.h>
#include <glade/glade.h>


app_widgets *local_widgets = NULL;

typedef struct app_widgets
{
    GtkWidget *window_Scopple;
    GtkWidget *entry;
    GtkWidget *label;
}app_widgets;


void on_entry_insert_text(GtkWidget *widget,gpointer data)
{
    app_widgets * local = NULL;
    local = (app_widgets *)data;

    printf("\non_entry: Data   : %p",data);
    printf("\non_entry: local  : %p",local);
}


app_widgets *connect_signals(GladeXML *xml_interface_file,app_widgets *local_widgets)
{
    GladeXML *xml = xml_interface_file;   

    printf("Connect_signal: local_widgets = %p\n",local_widgets);
   

    local_widgets->window_Scopple    = glade_xml_get_widget(xml,"window_Scopple");
    local_widgets->entry        = glade_xml_get_widget(xml,"entry");
    local_widgets->label        = glade_xml_get_widget(xml,"label");

    g_signal_connect(G_OBJECT(local_widgets->entry),"insert_text",G_CALLBACK(on_entry_insert_text),local_widgets);
    g_signal_connect(G_OBJECT(local_widgets->window_Scopple),"destroy",G_CALLBACK(gtk_main_quit),NULL);


    return local_widgets;
}

int _tmain(int argc, char* argv[])
{
    GladeXML *xml;

    local_widgets = g_malloc(sizeof(app_widgets));

    gtk_init(&argc, &argv);


    /* load the interface */
    xml = glade_xml_new("E:\\Documents\\Visual Studio 2005\\Projects\\Scopple\\debug\\scopple.glade", NULL, NULL);
    g_assert(xml != NULL);



    /* connect the signals in the interface */       
    glade_xml_signal_autoconnect(xml); //Cette fonction est une fontion que j'ai créée moi même


    /* start the event loop */
    gtk_main();



    return 0;
}

La sortie de ce programme est la suivante :

Connect_signal: local_widgets = 003E8D98
on_entry: data = 0242E8F0
on_entry: local = 0242E8F0

Comme on peut le constater les adresses ne sont pas les mêmes ! Et c'est pas normal !
Quelqu'un aurait une idée pour résoudre mon problème ? J'ai vraiment tout essayé j'en ai marre.

Merci d'avance.

Cordialement.



jeudi 8 mars 2007 à 12:41:40 | Re : GTK Passage de pointeur impossible

luhtor

Réponse acceptée !
A mon avis, c'est la définition du callback qui est mauvais.

void on_entry_insert_text(GtkWidget *widget,gpointer data) <= Toi tu as mis ca.

Imagine que ce soit ca:
void on_entry_insert_text(GtkWidget *widget, gchar * sz, gpointer data)

En cherchant vite fait sur le net, je trouvee ca (le signal n'est pas le meme, mais ca peut te donner une piste de recherche). Et dans ce cas, on comprend bien, pk ton pointeur est faux.
"insert-at-cursor" : void user_function(GtkEntry *entry, gchar *arg1, gpointer user_data);

jeudi 8 mars 2007 à 14:45:56 | Re : GTK Passage de pointeur impossible

neoTHGLF

Merci beaucoup c'était ça !

j'ai déclarer ma fonction comme ça :

void on_entry_insert_text(GtkEditable     *editable,
                                        gchar           *new_text,
                                        gint             new_text_length,
                                        gpointer         position,
                                        gpointer         user_data)

et ça marche ! Merci beaucoup !



Cette discussion est classée dans : local, int, xml, entry, widgets


Répondre à ce message

Sujets en rapport avec ce message

table dynamique et ficher xml (xmlparser) en C++ [ par Armandopoulos ] Bonjour à tous, Je voudris bien stocker des données (int,float,double,string,....) dans un fichier xml et pouvoir les lire a chaque fois ue je souhai erreur de mémoire mais je trouve pas le bug [ par dybman ] Voici le code qui pose problème:Je pense que la valeur Key prend de trop grande valeur et fais un dépassement de mémoire tampon mais je trouve pas le J'ai passé ma journée dessus, je vais peter un cable [ par fred23 ] Je suis crevé et dégouté. Je viens de passer ma journée sur ces codes de M.... que j'ai extrais de source trouvées sur le site.En tout et pour tout, j [C++] Ncuses et les couleur ? (linux) [ par panthere007 ] lien du totorielhttp://tldp.org/HOWTO/NCURSES-Progra...ml#COLORBASICS donc j' obtient que du noire et blanc quoi que je convertir un fichier texte en fichier XML. [ par boualiasma ] Salut à tous !Je suis en train d'essayer de convertir un fichier texte en xml.Ce fichier texte est structuré, et j'ai donc un identifiant en début de ajouter une librairie utilisateur à un programme C sous Visual Studio 2008 [ par boualiasma ] Salut,on peut implémenter des fonctions dans header par exemple calcul.h qui implémente les fonctions somme, multiplication. Dans mon programme main.c besoin d'un tuto svp [ par mana ] j'ai besoin d'un tuto sur les structures mais expliqué le plus simplement possible. j'ai quelques livres et j'ai fait des recherches sur internet mais Problème avec type de données et opérateur >> lors de lecture de fichier [ par bny ] Bonjour, j'essaie de décoder un fichier de configuration(txt) j'ai certain problèmes avec les types de données et l'opérateur >> (flux de données).  J tri d'un tableau de structure [ par sdiri_med ] bonjour pour tout le monde j'ai un petit problème de trie par age d'un tableau des employées voila mon code: [code] #include #include Problème classe et main : argument does not match [ par RS8 ] Bonjour,je fais actuellement de 'lOpenGL.Je voudrais avoir deux fichiers : drawing.cpp et main.cppDans le main.cpp il n'y a que le main et dans drawin


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales