Como chamar a unha chamada de C ++ de Java confiable desde a aplicación C ++ a través de JNI – Java, C ++, devolución de chamada, JNI

Teño unha aplicación C ++ que necesitas un interferón unha biblioteca de Java. Gustaríame recibir notificacións sobre o lado Java, polo que ten que chamar a aplicación C ++. Atopei numerosos exemplos sobre como invocar as funcións de Java de C ++ (esta é a parte fácil) e como chamar funcións de C / C ++ de Java que son exportadas desde unha DLL.

Todo o que eu Atopáronse ata agora como invocar a chamada de Java devolve desde unha función C ++ externa dentro dunha aplicación Java. Necesito o contrario.

con C ++ directo isto, por suposto, é fácil. Simplemente pasou un indicador de función á clase que á súa vez chamaría como unha devolución de chamada cando sexa necesario. Como podo facer isto cando estou invocando unha función Java?

No caso de que haxa un xeito mellor do que estou preguntando aquí é a aplicación xeral:

A miña aplicación C ++ Debe acceder a un servidor externo que transmitirá os datos á miña solicitude. A API de acceso é unha API baseada en Java. O meu plan actual é construír un recipiente Java que manexa todas as chamadas á API. Este envase será invocado desde a miña aplicación C ++ usando JNI. Cando se reciben os datos, eles van procesalos o máximo posible e, a continuación, notificará a miña aplicación C ++ cos datos de conxunto.

Para resumir, como podo chamar a unha función de C + de devolución de C + +? De a A clase Java que á súa vez foi invocada a través de JNI desde unha aplicación C ++. Non cargue ningún ficheiro DLL para usar Java. Aínda que poida facer un, se é necesario, se todo pode interactuar correctamente

camiño Función: aplicación C ++ – > Java biblioteca de clases –

respostas

3 para a resposta № 1

atopei. Hai unha función na clase de medio ambiente chamada “Rexistro”. Con isto podo gravar devolucións de chamadas de C ++ para calquera tipo de java en tempo de execución. Probei e funciona exactamente como se esperaba.

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *