Devido às necessidades do projeto, estudei recentemente o método da DLL de chamadas de Java. Como chamá -lo é escrito aqui para facilitar a referência no futuro:
O método adotado é a interface nativa JNI: Java, denominada JNI, faz parte da plataforma Java e pode ser usada para interagir com o código escrito em Java em outros idiomas.
Abaixo está um diagrama esquemático do trabalho JNI extraído da Internet:
Descrição geral: primeiro crie uma aula em Java, gerar. Classificar através de Javac e depois gerar .h de Javah; Em seguida, copie .h para VC e implemente funções específicas por VC.
Depois de compilar e passar, gerar DLL, coloque a DLL no projeto Java e use -o, e ela está finalizada.
Vamos falar sobre as etapas específicas (incluindo exemplos):
1. Construa uma classe Java: Carregar DLL, declarar que o método DLL deve ser usado e a implementação específica é responsável pela DLL; O código é o seguinte:
classe pública Java2cpp {static {System.loadlibrary ("javacallcpp");} public nativo int dll_add (int a, int b); // Adicione public nativo int dll_sub (int a, int b); // diminuir public nativo int dll_mul (int a, int b); // múltiplos nativos públicos int dll_div (int a, int b); // Divida public static void main (string args []) {int sum = 0; java2cpp test = new java2cpp (); sum = test.dll_add (2, 4); system.out.println ("Java Call CPP DLL Result:" + Sum);}}}}}}}2. Gere o arquivo .h: CMD para o diretório java2cpp.java e faça o seguinte:
Etapa 1: javac java2cpp.java gera java2cpp.class
Etapa 2: Javah java2cpp gera o arquivo de cabeçalho java2cpp.h, com o seguinte conteúdo:
Nota: O conteúdo do arquivo de cabeçalho Java2CPP.H não pode ser modificado, caso contrário, ocorrerá um erro.
3. Fazendo a Biblioteca Dinâmica de VC: Crie um projeto de biblioteca dinâmica C/C ++, chamado Javacallcpp, importe Java2CPP.H e implemente seu método:
#include "java2cpp.h" #include "dllapi.h" jniexport jint jnicall java_java2cpp_dll_1add (jnienv *env, job obj, jint a, jint b) {int = 0; var = dll_api_add (a, b); Java_java2cpp_dll_1sub (jnienv *Env, trabalho obj, jint a, jint b) {int var = 0; var = dll_api_sub (a, b); retorna var;} jniexport jint jnicall java_java2cppp_dll_1mul (jninv *jiNV *o JAVA_JAVA2CPPP_Dll_1mul (jniennv *jiNV *o JAVA_JAVA2CPPP_Dll_1mul ( 0; var = dll_api_mul (a, b); retornar var;} jniexport jint jnicall java_java2cpp_dll_1div (jnienv *Env, job obj, jint a, jint b) {int var = 0 dll_api_div (a, b);Adicionar dll_api_add (), subtrair dll_api_sub (), multiply dll_api_mul () e divida dll_api_div ().
Implementado no arquivo, o nome do arquivo é dllapi.cpp, e a implementação é a seguinte:
int dll_api_add (int a, int b) {return (a+b);} int dll_api_sub (int a, int b) {return (ab);} int dll_api_mul (int a, int b) {return (a*b);} int dll_api_div (int a, int b) {No momento, o projeto ainda compila, porque há um erro em incluir <jni.h>, você precisa adicionar o diretório em que o JNI está localizado, como segue:
4. Compile o projeto da biblioteca dinâmica: gerar javacallcpp.dll e copiar esta biblioteca dinâmica para o diretório do projeto Java:
5. Use DLL: Execute o programa Java, o resultado é o seguinte:
Neste ponto, a DLL de chamada Java foi concluída.
Resumir
O exposto acima é o método da Java Dynamic Library - JNI implementada chamando C/C ++ que o editor apresenta a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!