Я пытаюсь реализовать C-код на Java с помощью SWIG 1.3. Сейчас я
необходимо перестроить некоторые существующие C в код Java и предоставить функцию
указатель на функцию Java для метода C.
Код 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 не
обычно позволяют функциям обратного вызова быть написанными на целевом языке, это
может быть достигнуто с использованием типографских карт и других расширенных функций SWIG.
Это описано в следующей главе. "
Куда это относится?
Я также нашел решение для C ++, но есть ли способ адаптировать его к C?
Swig c ++ с Java теряет тип в полиморфных функциях обратного вызова
морфические-обратные вызовы функция
Спасибо за вашу помощь.