Acceda al objeto JNI a la capa de Java como puntero de referencia
Estoy escribiendo una aplicación donde tengo mucho que ver con la llamada JNI
y cada vez que tengo que realizar la llamada getter()
para acceder a los valores de las variables. En cambio, es posible acceder a la referencia de objetos del objeto JNI
en Java Layer para que pueda obtener el valor de la variable actualizada sólo con el nombre de la variable (como obj.name
lugar de obj.getName()
).
Tengo cheque con esto y esto , pero no conseguir manera cómo a la dirección encubierta al objeto en la capa de java.
- Incluye la biblioteca Boost C ++ en android
- Bloquear el cuadro de diálogo desde el código JNI
- Cómo capturar excepciones generadas con código nativo que se ejecuta en Android
- Unsatisfiedlinkerror en android (eclipse)
- Cómo eliminar soporte nativo de un proyecto de Android en eclipse porque eclipse está mostrando errores en jni?
EDIT Quería acceder a Obj de esta manera en la capa Java de JNI.
private native CustomObj getCPPCustomObjectPointer();
Cualquier sugerencia aquí.
- Cómo agregar un servicio de sistema a Android Framework
- QNetwork error cuando se utiliza Qt lib con la aplicación JNI Android nativa
- Invocación de funciones nativas de la biblioteca portada
- Acceder al acelerómetro de jni
- Es una pérdida de una sola vez de referencia a la memoria nativa asignada por una aplicación Android un gran negocio?
- ¿Cómo orientar múltiples arquitecturas mediante NDK?
- Llamar al miembro de la clase JAVA desde el código nativo C / C ++
- Cómo depurar SEGV_ACCERR
¿Es posible acceder a la referencia Object del objeto JNI en Java Layer?
Sí tu puedes. Sin embargo, no puede utilizarlo para acceder a sus propiedades. Sólo puede mantener su dirección como un valor long
.
Si desea hacerlo, debe crear sus objetos C ++ en memoria heap y devolver sus direcciones como números long
.
MyClass *obj = new MyClass(); return (long) obj;
En Java lado puede guardar esa dirección como un número long
donde quiera. Dado que los objetos han sido creados en memoria heap, permanecerán válidos entre las llamadas JNI.
Además, tienes que pasarlas a llamadas JNI posteriores como un número long
y, a continuación, debes convertirlas en MyClass *
en tu lado de C ++.
MyClass *obj = (MyClass *)thatLongNumber; obj->someProperty; // Access its properties and methods via -> operator
¿Desea conservar una referencia a un objeto C ++ desde su lado Java ? Usted no puede .
Esas implementaciones (C / Java) para representar y acceder a objetos / primitivas son completamente diferentes. Es por eso que hay tantas funciones de mambo jambo cuando se emite desde un tipo de datos a otro.
- Establecer posición de botón aleatorio dentro de los límites de Java / Android
- Cuando se establece la visibilidad de diseño como GONE, no puedo ver mi spinner que está fuera del diseño