begin process at 2012 02 10 02:06:14
  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 [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 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 créer une fenetre en plus d'une fenetre glut [ par ldllaurent82 ] Bonjour,J'aimerais pouvoir créer un interface (avec boutons et autres) en plus de ma fenetre opengl ouverte avec glut.Le problème c'est que je ne peux fonction et matrice [ par herve_blondel ] bonjour a tous.je suis un debutant en C++ et j'aimerais ecrire un fonction qui prend en argument une matrice et me retourne une matrice(je sais ce que Lecture Fichier texte --> Variable [ par Guidelor ] BonjourJ'ai un fichier texte dans lequel il y a 2 lignes:12345678J'aimerais que mon prog lise le 1er chiffre et le mette dans la variable int Chiffre1 Probleme de tableau entre C et C++ [ par fred23 ] Bonjour,J'ai récupéré des codes qui semblent en C et je souahiterais les mettre en C++.qui peut me dire si ces codes sont en C ou C++.Matrix = (int ** BitBlt / StretchDIBits ?? [ par sebseb42 ] salut a tousvoila, j'ai besoin de blitter des données graphique a l'ecran, et ce de maniere tres tres rapide car c'est une operation que je fait extre ecrire une fonction en c++ [ par Armandopoulos ] Salut,Comment puis ecrire une fonction en C++, qui doit memoriser un objet d une classe dependamment le l utilisateur, soit dans un fichier xml ou dan


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 4,742 sec (3)

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