Toon posts:

[C]char[] als functienaam

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben wat aan het prutsen met C en daar loop ik vast op een probleem wat in andere programmeertalen zo opgelost is. Dit is een stukje code als voorbeeld:

code:
1
2
3
4
5
void doeIets(GtkWidget *widget) {
  printf ("ik doe iets\n");
}

g_signal_connect (G_OBJECT (eventBox), "enter_notify_event", G_CALLBACK (doeIets), NULL);


Het gaat om het derde argument van g_signal_connect. Dit is een functie die aangeroepen wordt zodra het event plaatsvind, in dit geval een enter_notify_event. Maar om mijn hele applicatie generiek te maken, wil ik het derde argument uit een variabele halen. Dus bijvoorbeeld zoiets:

code:
1
2
3
4
5
6
7
void doeIets(GtkWidget *widget) {
  printf ("ik doe iets\n");
}

char *functieNaam = "doeIets";

g_signal_connect (G_OBJECT (eventBox), "enter_notify_event", G_CALLBACK (functieNaam), NULL);


Maar dat werkt natuurlijk niet, want 'functieNaam' is geen functie, maar de variabele 'functieNaam' bevat de waarde wat de naam van de functie is. Hoe krijg ik dit werkend? Ik dacht iets als valueOf(functieNaam) ofzo maar dat werkt niet... Iemand enig idee?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Waarom gebruik je niet gewoon functiepointers?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
nou, dat g_signal_connect() is een functie van GTK en dus dient het derde argument G_CALLBACK te zijn, volgens mij althans.. Mocht dat niet zo zijn dan hoor ik graag :)

  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
C:
1
2
3
4
5
void (*myPtr)(GtkWidget*);    // pointer variabele

myPtr = doeIets;   // laat pointer verwijzen naar doeIets()

g_signal_connect (G_OBJECT (eventBox), "enter_notify_event", G_CALLBACK (myPtr), NULL);


Even uit mijn hoofdgetypt trouwens, dus de syntax kan misschien niet helemaal kloppen (heb al een tijdje geen function pointers meer gebruikt), maar iets in die richting moet toch werken.

[ Voor 32% gewijzigd door ReverendBizarre op 24-05-2006 11:35 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-02 04:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op woensdag 24 mei 2006 @ 11:20:
nou, dat g_signal_connect() is een functie van GTK en dus dient het derde argument G_CALLBACK te zijn, volgens mij althans.. Mocht dat niet zo zijn dan hoor ik graag :)
Je snapt de post van -NMe- niet helemaal. Die GTK call heeft hier weinig mee te maken, ipv een vaste functienaam wil je een variabele gebruiken die naar een functie wijst. Uiteraard gaat dat niet met strings, maar net zoals met variabelen met pointers. IrishMaiden illustreert dat mooi, myPtr kun je naar elke functie laten wijzen die een void returnt en een GtkWidget* als parameter heeft.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
In eerste instantie snapte ik het niet helemaal, maar het is nu wel gelukt inderdaad. danku :)

  • writser
  • Registratie: Mei 2000
  • Laatst online: 19-02 10:39
Zo te zien wil je wat met GTK prutsen. Heb je de officiele tutorial (http://www.gtk.org/tutorial/index.html) al doorgewerkt? Lees bijvoorbeeld sectie 3.3: Theory of Signals and Callbacks. Verder staat hier een hele tutorial over function pointers: http://www.newty.de/fpt/index.html. Met een beetje googlen was je er misschien zelf ook wel uitgekomen. Maar vooruit, mensen die GTK+ willen proberen moet je aanmoedigen :). Heb je ook al eens gekeken naar gtkmm?

Onvoorstelbaar!

Pagina: 1