2011-11-03 23 views
7

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

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++.

+2

¿Podría aclarar lo que está preguntando? Si necesita devolver 2 cosas, devuelva una estructura. – Pubby

+0

¿'m_buffer' ya apunta a la memoria asignada? Si es así, ¿por qué dices 'nuevo'? –

+0

I reescrito la cuestión –

Respuesta

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

El ByteBuffer debe ser directo para que esto funcione.

+0

Esto es exactamente lo que necesito. ¡Gracias! –

+0

Creo que 'Byte * data = env-> GetDirectBufferAddress (obj);' sería más descriptivo. – Patrick

0

Si usted está tratando de devolver la dirección del primer elemento dentro de m_buffer, a continuación, sólo se puede hacer:

return m_buffer;

..o:

return &m_buffer[0]