Récemment, j'ai réalisé un projet de reconnaissance faciale sur la page Web et écrit un algorithme de reconnaissance faciale en C ++. Cependant, je dois utiliser le backend Java sur la page Web, qui implique le problème des DLL d'appel Java. Ce qui suit est un exemple simple de ce que l'éditeur a réalisé en recherchant des informations pertinentes.
1. La première étape consiste à créer une nouvelle classe en Java
Comme indiqué dans l'image ci-dessus, faites attention à la phrase System.LoadLibrary ("javacallcpp");, qui est le code pour charger le fichier DLL. Ensuite, nous devons implémenter l'addition, la soustraction, la multiplication et la méthode de division définies ci-dessous dans la DLL.
2. Compilez le fichier, le nom du fichier est java2cpp.java , compilez-le d'abord dans le fichier de classe. Si vous utilisez Eclipse, le fichier a été généré automatiquement, dans le dossier BIN dans le répertoire du projet. Compilez avec la ligne de commande, ouvrez la fenêtre CMD, CD au répertoire où se trouve le fichier .java et exécutez la commande javac java2cpp.java, c'est-à-dire générer java2cpp.class.class
Exécutez ensuite la commande javah java2cpp pour générer le fichier d'en-tête java2cpp.h, mais cette étape échoue souvent. Une autre méthode peut réussir. Entrez le répertoire du projet Eclipse, entrez le dossier BIN, exécutez la commande javah -classpath. -jni package name.class name (com.test.jni.java2cpp), puis générez com_test_jni_java2cpp.h
3. Créez un nouveau projet Win32 dans VS, nommez-le: testjni, la deuxième étape est la suivante:
4. Copiez le fichier d'en-tête généré dans la deuxième étape dans le dossier du projet, puis importez-le.
5. Implémentez la méthode dans le fichier d'en-tête:
(1) Créez un nouveau fichier d'en-tête dllapi.h, le code est le suivant:
#include "com_test_jni_java2cpp.h" int dll_api_add (int a, int b); int dll_api_sub (int a, int b); int dll_api_mul (int a, int b); int dll_api_div (int a, int b);
(2) Créez un nouveau dllapi.cpp pour implémenter la méthode ci-dessus, le code est le suivant:
#include "stdafx.h" #include <iostream> #include "dllAPI.h" int dll_api_add (int a, int b) {return (a + b);} int dll_api_sub (int a, int b) {return (a - b);} int dll_api_mul (int a, int b) {return (a * b); Dll_api_div (int a, int b) {return (a / b);} (3) Ajouter du code à testjni.cpp pour implémenter la méthode com_test_jni_java2cpp.h. Après avoir ajouté le code est le suivant:
// testjni.cpp: définit la fonction d'exportation de l'application DLL. // # inclut "stdafx.h" #include "testjni.h" #include "com_test_jni_java2cpp.h" #include "dllapi.h" // Il s'agit d'un exemple de variables d'exportation testjni_api int ntestjni = 0; // Ceci est un exemple de fonctions d'exportation. Testjni_api int fntestjni (void) {return 42;} // c'est le constructeur de la classe exportée. // Pour plus d'informations sur les définitions de classe, voir TestJni.HCTESTJNI :: ctestjni () {return;} Jniexport jint jnicall java_com_test_jni_java2cpp_dll_1add (jnienv * env, job obj, jint a, jint b) {int var = 0; var = dll_api_add (a, b); return var;} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1sub (jnienv * env, job obj, jint a, jint b) {int var = 0; var = dll_api_sub (a, b); return var;} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1mul (jnienv * env, job obj, jint a, jint b) {int var = 0; var = dll_api_mul (a, b); return var;} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1div (jnienv * env, job obj, jint a, jint b) {int var = 0; var = dll_api_div (a, b); return var;}(4) Générez DLL et vous pouvez trouver TestJni.dll dans le dossier de débogage dans le dossier du projet. Cependant, comme nous avons besoin que la DLL soit nommée JavacallCPP en Java, nous renomnons le projet à JavacallCPP à ce moment, puis régénérons Javacallcpp. [Cette étape ne va pas générer, ajouter le chemin comme suit]
6 méthodes d'appel
Copiez le javacallcpp.dll généré à l'étape 5 dans le dossier bin sous le chemin d'installation JRE et exécutez le programme Java. Les résultats sont les suivants:
Ce qui précède est la description complète de la façon dont Java appelle la bibliothèque DLL C ++ que l'éditeur vous a présenté. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!