On Saturday, 11 May 2013 at 17:34:53 UTC, gedaiu wrote:

yeah... what a shameful mistake.. i vave a new tricky question... how i can provide a class method instead a simple function as callback?

with D code use delegates as Ali commented, it's simple. with C code use static method and pass instance pointer as callback target, something like this

---------------

// C function
alias extern(C) function(void*) callbackfunc;
extern(C) setCallback(callbackfunc cb, void* userptr);


class Handler {
 static extern(C) callback(void* instance) {
  if ( auto self = cast(Handler) instance )
    self.onCallback();
 }

 void onCallback() {
  // ...
  // your code here
  // ...
 }
}


void setCAPI_callback(Handler hnd) {
setCallback(Handler.callback, hnd); // don't remember if needed to cast hnd to void
}

however this would require C API which has userptr argument in callbacks(hopefully most libs i've seen has this)

Reply via email to