r17b r16 r13 ndk64 ndk java c++ android-ndk jni bytebuffer

java - r16 - ndk r13



Obtener el puntero de un Java ByteBuffer a través de JNI (2)

¿Cómo puedo obtener un puntero a la matriz interna de un Java ByteBuffer?

JNIEXPORT void JNICALL test(JNIEnv *env, jobject thiso) { jclass cls = env->FindClass("java/nio/ByteBuffer"); jmethodID aloc = env->GetStaticMethodID(cls, "allocateDirect", "(I)Ljava/nio/ByteBuffer;"); jobject obj = env->CallStaticObjectMethod(cls, aloc, 1000); }

PD: estoy haciendo eso para compartir la memoria utilizada por Java y C ++.


Si intentas devolver la dirección del primer elemento dentro de m_buffer , entonces puedes hacer:

return m_buffer;

..o:

return &m_buffer[0]


void * data = env->GetDirectBufferAddress(obj);

El ByteBuffer debe ser directo para que esto funcione.