Function pointer callback from C

Mike Johnson mrjohnson at miketec.org
Sun Feb 25 22:12:51 PST 2007


Hello,

I've been beating my head against D's delegate support. I've probably 
read every mention in the docs and post on the news server multiple 
times and I'm just not getting it. Any help would be awesome.

I'm currently trying to connect a signal handler to a member function.

The member function needs access to the `this' pointer. The callback 
itself works, but I get undefined weirdness and crashes on trying to 
modify any D member variables.

(This is GTK.)

The signal handler is installed:

         this.sourceBuffer.connectSignal("changed",
                                         &on_sv_changed);

The function doing black magic:

     extern(C) public void connectSignal(
         char[] signalName,
         void delegate(int* widget, gpointer data) func,
         int data = 0,
         GConnectFlags flags = cast(GConnectFlags) 0) {

         g_signal_connect_data(this.self,
                               String.stringz(signalName),
                               func.funcptr,
                               cast(gpointer) data,
                               cast(int *) 0,
                               flags);
     }

Of course, I can pass void* data through the gpointer variable. But I 
can't convert a class instance to an pointer... which would be really 
*cough* cool *cough* :-) But maybe something else?

The signal handler itself:

     private extern(C) void on_sv_changed(int *widget, int *data) {
         printf("changed\n");
	this.changed = true; // GTK spews warnings and dies weirdly
     }

Thanks so much,
Mike Johnson


More information about the Digitalmars-d-learn mailing list