2010-04-20 12 views
16

Tengo un método:JNI - método nativo con el parámetro ByteBuffer

public native void doSomething(ByteBuffer in, ByteBuffer out); 

Generado por javah C/cabecera de este método C++ es:

JNIEXPORT void JNICALL Java__MyClass_doSomething (JNIEnv *, jobject, jobject, jobject, jint, jint); 

¿Cómo puedo obtener una matriz de datos de jobject (que es una instancia de ByteBuffer)?

Respuesta

25

Suponiendo que se asignaron al ByteBuffer usando ByteBuffer.allocateDirect() Use GetDirectByteBufferAddress

jbyte* bbuf_in; jbyte* bbuf_out; 

bbuf_in = (*env)->GetDirectBufferAddress(env, buf1); 
bbuf_out= (*env)->GetDirectBufferAddress(env, buf2); 
+1

El tipo de retorno de GetDirectBufferAddress es void *, es necesario convertirlo a jbyte *: bbuf_in = (jbyte *) (env *) -> GetDirectBufferAddress (env, buf1); // C bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // C++ –

+1

@ Error454 Esto es C, no es necesario que lances 'void *' s –

+0

Necesitas emitir si tienes -Wendántico –

Cuestiones relacionadas