Me explico, estoy programando con GTK+-2.0 + C y tengo un problema con las funciones de rellamada.
Unicamente puedo pasar un unico parametro que es del tipo gpointer y yo necesito pasar varios parametros. Pense en un array, pero no hay manera de coger un elemento que no sea el primero sin que me de una bonita violacion de segmento. Lo que hacia era:
funcion_main() {
GtkWidget *unWidget, *otroWidget;
gpointer array[2];
/* Aqui trabajo con los widgets */
array[0] = (gpointer) unWidget;
array[1] = (gpointer) otroWidget;
gtk_signal_connect (GTK_OBJECT (mi_objeto_para_el_evento), "mi_evento",GTK_SIGNAL_FUNC (mi_funcion_asociada), array);
/* Resto de programa */
return 0;
}
gint mi_funcion_asociada(GtkWidget *w, GdkEvent *e, gpointer mis_datos){
GtkWidget *nuevoWidget, *otronuevoWidget;
nuevoWidget = (GtkWidget) mis_datos[0];
otronuevoWidget = (GtkWidget) mis_datos[1];
/* uso de la funcion */
return 0;
}
Pero eso, a pesar de no darme error a la hora de compilar, cuando utilizo los widgets, me da un segmentation fault por que creo que no accede bien a las posiciones de memoria. He probado ademas, refiriendome a los punteros de otras formas (puntero +1, por ejemplo) pero me sigue fallando.
La otra opcion, eran las estructuras, pero cuando paso un puntero de la estructura y despues utilizo los miembros el compilador parece que me put** diciendome que si en vez de -> quiero poner . :S
He buscado por google, pero la verdad que no he encontrado nada que me pueda ser util.
Ahora mismo lo tengo como variables globales, pero me parece una chapuza por que, entre otras cosas, queria dividir el programa en varios ficheros y haciendolo asi no puedo.
Cualquier ayuda será bien recibida
Salu2 y muchas gracias!
PD: Los widget estan bien tratados, ya que si los paso de uno en uno como (gpointer) unWidget, no me produce ningun fallo.
PD2: No se si sera util, gpointer es un puntero a void.