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.