Je suis aux prises avec un problème fondamental. .dll
J'essaye d' appeler une fonction de Java avec la signature suivante:
int function(double* a, double b);
Mon problème est que je ne sais pas comment utiliser le double* a
paramètre en Java et comment imprimer la valeur manipulée une fois l'appel de fonction terminé.
Je pense que pour le cas le plus simple de récupérer une sortie, utilisez un double [] de longueur 1.
C'était mon fichier java (usefunc.java):
public class usefunc {
static {
System.loadLibrary("usefunc");
}
public native int function(double a[], double b);
public static void main(String args[]) {
double a[] = new double[1];
new usefunc().function(a,1.0);
System.out.println("a[0] = " + a[0]);
}
}
C'était mon fichier C ++ (usefunc.cpp):
#include <jni.h>
extern "C" {
JNIEXPORT jint JNICALL Java_usefunc_function
(JNIEnv *env, jobject obj, jdoubleArray a, jdouble b);
int function(double *a, double b);
}
int function(double* a, double b) {
*a = 77.7;
return 0;
}
/*
* Class: usefunc
* Method: function
* Signature: ([DD)I
*/
JNIEXPORT jint JNICALL Java_usefunc_function
(JNIEnv *env, jobject obj, jdoubleArray a, jdouble b) {
jboolean iscopy;
double *nativeA = env->GetDoubleArrayElements(a, &iscopy);
jint ret = function(nativeA, b);
env->ReleaseDoubleArrayElements(a, nativeA, 0);
return ret;
}
Compilé avec:
g++ -I /usr/local/jdk1.8.0_60/include/ -I /usr/local/jdk1.8.0_60/include/linux/ -shared usefunc.cpp -o libusefunc.so
javac usefunc.java
Ran avec:
java usefunc
produit:
a[0] = 77.7
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots