Tengo un par de funciones JNI que tienen que funcionar en el mismo objeto C++. Me gustaría guardar ese objeto en el objeto java a través del cual se invocan las funciones JNI, pero parece que Java no tiene manera de almacenar punteros para que las funciones puedan acceder más tarde.Devolver el objeto C++ a Java
bien soy consciente de que estoy haciendo un trabajo terrible explicar a mí mismo por lo que aquí es un ejemplo:
void clear_numbers(JNIEnv *env, jobject me) {
me.myCppVector.clear();
}
void set_number(JNIEnv *env, jobject me, jint index, jint num) {
me.myCppVector[index]=num;
}
jint get_number(JNIEnv *env, jobject me, jint index) {
returnme.myCppVector[index];
}
Mi problema es la creación de un jobject.myCppVector por lo que voy a ser capaz de utilizarlo de diferentes llamadas de función.
espero que alguien entiende mis divagaciones
tal vez convertir el puntero a un entero, y luego almacenar el número entero en un campo del objeto Java – ignis
No es eso considera que no es seguro? Además, ¿sizeof (jint) es igual a sizeof (void *) en todas las plataformas? – Afiefh
No conozco ninguna razón por la cual no sea seguro. Sin embargo, los punteros tienen diferentes tamaños en diferentes plataformas, mientras que los tipos primitivos Java no, y por supuesto esto significa que necesitaría mapear punteros a primitivas de diferentes tipos en el código Java - int para 32 bit, long para 64 bit, etc. http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#85587 – ignis