J'essaye d'implémenter du code C en Java en utilisant SWIG 1.3. Maintenant, je de reconstruire du code C en Java existant et de fournir une fonction pointeur vers une fonction Java à la méthode C.Enregistrement de la fonction java comme callback dans la fonction C
Le code 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);
}
Tout ce que je l'ai déjà en Java est:
public static void message_handler(def.SWIGTYPE_p_context_t ctx, def.SWIGTYPE_p_queue_t node, String data) {}
et cela devrait être enregistré comme rappel de la même manière que dans le code ci-dessus, maintenant en Java:
net.register_message_handler(ctx, message_handler);
Ce que j'ai trouvé http://www.swig.org/Doc1.3/SWIGDocumentation.html#SWIG_nn30 y compris une référence non définie à la fin de ce chapitre: « Et maintenant, une note finale sur le soutien du pointeur de fonction. Bien que SWIG n'autorise normalement pas l'écriture de fonctions de rappel dans la langue cible, ce peut être accompli avec l'utilisation de typemaps et d'autres fonctions SWIG avancées. Ceci est décrit dans un chapitre ultérieur. » Où cela se réfère à
? J'ai aussi trouvé une solution pour C++, mais est-il possible d'adapter ce à C? Swig c++ w/ Java loses type on polymorphic callback functions morphiques-rappel-fonctions
Merci pour votre aide
j'ai écrit une réponse assez détaillée à ce même problème: http://stackoverflow.com/questions/12210129/how-should-i-write-the-i-file-to-wrap-callbacks- in-java-or-c-sharp – Flexo