Como ligar para um retorno de retorno C ++ de Java confiou no aplicativo C ++ através do JNI – Java, C ++, Callback, JNI

Eu tenho um aplicativo C ++ Você precisa de um interferon uma biblioteca Java. Eu gostaria de receber notificações no lado Java, então você deve ligar para o aplicativo C ++. Eu encontrei numerosos exemplos sobre como invocar as funções Java de C ++ (esta é a parte fácil) e como chamar funções C / C ++ de Java que são exportadas de uma DLL.

Tudo o que eu Encontramos até agora é como invocar o Java Chamada retorna de uma função C ++ externa dentro de um aplicativo Java. Eu preciso de outra forma.

com direto C ++, é claro, é fácil. Eu simplesmente passei um indicador de função para a classe que, por sua vez, ligaria como um retorno de chamada quando necessário. Como posso fazer isso quando estou invocando uma função Java?

Caso haja uma maneira melhor do que estou pedindo aqui é a aplicação geral:

Meu aplicativo C ++ Você precisa acessar um servidor externo que transmitirá os dados de volta para o meu aplicativo. A API de acesso é uma API baseada em Java. Meu plano atual é construir um contêiner Java que lida com todas as chamadas para a API. Esta embalagem será invocada do meu aplicativo C ++ usando o JNI. Quando os dados são recebidos, eles os processarão o máximo possível e, em seguida, notificarão meu aplicativo C ++ com os dados definidos.

Para resumir, como posso chamar uma função de chamada C + +? De um A classe Java que por sua vez foi invocada através do JNI de um aplicativo C ++. Não carregue nenhum arquivo DLL para usar o Java. Embora eu possa fazer um, se necessário, se tudo pode interagir corretamente.

Aplicativo de função: c ++ Aplicativo – > Biblioteca de classe java – >

Respostas

3 para a resposta № 1

Eu achei. Existe uma função na classe Ambiental chamada “Registro”. Com isso, posso gravar retornos de chamada C ++ para qualquer tipo de java no tempo de execução. Eu tentei e funciona exatamente como esperado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *