Tinc una aplicació C ++ que necessita una interfazcon una biblioteca de Java. M’agradaria rebre notificacions de la banda de Java, de manera que ha de tornar a trucar a l’aplicació C ++. He trobat nombrosos exemples sobre com invocar funcions de Java des de C ++ (aquesta és la part fàcil) i com cridar a funcions de C / C ++ des de Java que S’exporten des d’una DLL.
Tot el que he trobat fins ara és com invocar devolucions de trucada de Java des d’una funció externa de C ++ dins d’una aplicació de Java. Necessito el contrari.
Amb C ++ directe això, per descomptat, és fàcil. Simplement vaig passar un indicador de funció a la classe que al seu torn cridaria com una devolució de trucada quan sigui necessari. Com puc fer això quan estic invocant una funció Java?
En el cas que hi hagi una millor manera del que estic demanant aquí és l’aplicació general:
El meu aplicació C ++ necessita accedir a un externoservidor que transmetrà les dades de tornada a la meva aplicació. L’API d’accés és una API basada en Java. El meu pla actual és construir un contenidor Java que manegi totes les crides a la API. Aquest embolcall s’invocarà des de la meva aplicació C ++ utilitzant JNI. Quan es reben les dades, els processaran tant com sigui possible i després notificar a la meva aplicació C ++ amb les dades ajustades.
Per resumir, com puc cridar a una funció de devolució de trucada de C + +? d’una classe de Java que al seu torn es va invocar a través d’JNI des d’una aplicació de C ++. No cal carregar cap arxiu DLL perquè el faci servir Java. Encara que puc fer un si és necessari si tot pot interactuar adequadament.
Ruta de la funció: aplicació C ++ – > biblioteca de classes Java – > funció de devolució de trucada C ++
Respostes
3 per la resposta № 1
El vaig trobar. Hi ha una funció en la classe d’entorn anomenada “RegistrarNativos”. Amb això puc registrar devolucions de trucada de C ++ per a qualsevol classe de Java en temps d’execució. Ho vaig provar i funciona exactament com s’esperava.