D
Hi!
Ich versuch schon ne ganze Weile dahinter zu steigen, wie Glib Signale verbinden und auslösen kann, aber der Source-Code ist irgendwie verdammt schlecht kommentiert.
An g_signal_connect () übergibt man ja einen Funktionszeiger (der durch das Makro G_CALLBACK in die Form void (*) (void) umgewandelt wird) auf eine Funktion, deren Signatur mit dem Signal übereinstimmen muss.
Bei g_signal_emit () übergibt man dann beliebig viele Argumente, die ebenfalls mit der Signatur der Funktion übereinstimmen müssen.
Wie schafft es jetzt g_signal_connect () zu überprüfen, ob die Signatur stimmt, und wie schafft es g_signal_emit () die Parameter, die es übergeben bekommt (und dann ja nur als va_list vorliegen hat) so weiterzugeben, dass am Ende die Funktion, zu der man den Funktionszeiger an g_signal_connect () angegeben hat, auch wieder aufgerufen werden kann? Werden da die ganzen Parameter wieder einzeln irgendwie auf den Stack gepusht und anschließend die Funktion aufgerufen?