#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" CV* callback_ref; int runCallback(const char* param) { int count; int answer; dSP; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(newSVpv(param, 0))); PUTBACK; count = call_sv((SV*)callback_ref, G_SCALAR); SPAGAIN; if (count != 1) croak("Uncknown return value format. Returned %d params instid 1", count); answer = POPi; FREETMPS; LEAVE; return answer; } MODULE = Callback PACKAGE = Callback void registCallback(cb) CV* cb; PROTOTYPE: $ PPCODE: callback_ref = cb; void runCallback(param) const char* param; PROTOTYPE: $ PPCODE: XPUSHs(sv_2mortal( newSViv(runCallback(param)) ));