I am trying to implement some C code in Java by using SWIG 1.3. Now I have to rebuild some existing C into Java code and to provide a function pointer to a Java function to the C method.
The C code: net.c:
void register_message_handler( context_t *ctx, message_handler_t handler) {
context->msg_handler = (void (*)( void *, coap_queue_t *, void *)) handler;
}
client.c:
void message_handler(context_t *ctx, queue_t *node, void *data) {
...
}
int main(int argc, char **argv) {
// setup ctx
register_message_handler( ctx, message_handler );
}
All I already have in Java is:
public static void message_handler(def.SWIGTYPE_p_context_t ctx, def.SWIGTYPE_p_queue_t node, String data ) {}
and this should be registered as callback in the same way as it is done in the above C code, now in Java:
net.register_message_handler(ctx, message_handler);
What I found was http://www.swig.org/Doc1.3/SWIGDocumentation.html#SWIG_nn30 including an undefined reference at the end of this chapter: "And now, a final note about function pointer support. Although SWIG does not normally allow callback functions to be written in the target language, this can be accomplished with the use of typemaps and other advanced SWIG features. This is described in a later chapter." Where does this refer to?
I also found a solution for C++, but is there a way to adapt this to C? Swig c++ w/ Java loses type on polymorphic callback functions morphic-callback-functions
Thanks for your help.