我正在尝试通过使用SWIG 1.3在Java中实现一些C代码。现在,我需要将一些现有的C代码重建为Java代码,并向C方法提供指向Java函数的函数指针。
C代码:
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 );
}
我在Java中已经拥有的是:
public static void message_handler(def.SWIGTYPE_p_context_t ctx, def.SWIGTYPE_p_queue_t node, String data ) {}
现在,这应该像上面的C代码一样以相同的方式注册为回调函数,但是现在在Java中:
net.register_message_handler(ctx, message_handler);
我发现的是http://www.swig.org/Doc1.3/SWIGDocumentation.html#SWIG_nn30,其中包括本章末尾的未定义引用: “现在,关于函数指针支持的最后说明。虽然 SWIG 通常不允许在目标语言中编写回调函数,但可以通过使用 typemaps 和其他高级 SWIG 功能来实现。这将在后面的章节中介绍。” 这是指什么?
我也找到了一个 C++ 的解决方案,但有没有办法将其适应于 C?Swig c++ w/ Java loses type on polymorphic callback functions。
谢谢你的帮助。