Come chiamare una callback C ++ da Java si basava dall’applicazione C ++ tramite JNI – Java, C ++, Callback, JNI

Ho un’applicazione C ++ Hai bisogno di un interferone una biblioteca Java. Vorrei ricevere notifiche sul lato Java, quindi è necessario chiamare l’applicazione C ++. Ho trovato numerosi esempi su come invocare le funzioni Java da C ++ (questa è la parte facile) e come chiamare le funzioni C / C ++ da Java che vengono esportate da una DLL.

Tutto ciò che io Ho trovato finora è come richiamare i ritorni di chiamata Java da una funzione C ++ esterna all’interno di un’applicazione Java. Ne ho bisogno diversamente.

Con Direct C ++ Questo, ovviamente, è facile. Ho semplicemente superato un indicatore di funzione alla classe che a sua volta chiamerebbe come callback quando necessario. Come posso farlo quando sto invocando una funzione Java?

Nel caso in cui ci sia un modo migliore di quello che sto chiedendo qui è l’applicazione generale:

La mia applicazione C ++ È necessario accedere a un server esterno che trasmetterà i dati alla mia applicazione. L’API di accesso è un’API basata su Java. Il mio piano attuale è quello di costruire un contenitore Java che gestisce tutte le chiamate all’API. Questa confezione verrà richiamata dalla mia applicazione C ++ utilizzando JNI. Quando i dati vengono ricevuti, li elaboreranno il più possibile e quindi avviserano la mia applicazione C ++ con i dati impostati.

Per riassumere, come posso chiamare una funzione C + Clock +? Di A Java Class che a sua volta è stato invocato tramite JNI da un’applicazione C ++. Non caricare alcun file DLL per utilizzare Java. Anche se posso fare uno se necessario se tutto può interagire correttamente.

Percorso funzione: applicazione C ++ – > Biblioteca di classe Java – >

Risposte

3 per la risposta № 1

L’ho trovato. C’è una funzione nella classe Ambiente chiamata “Registrazione”. Con questo posso registrare il rendimento delle chiamate C ++ per qualsiasi tipo di Java in fase di runtime. L’ho provato e funziona esattamente come previsto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *