2010-04-20 20 views
16

J'ai une méthode:JNI - méthode native avec le paramètre ByteBuffer

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

généré par javah C/en-tête C de cette méthode est:

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

Comment puis-je obtenir un tableau de données de jobject (c'est une instance de ByteBuffer)?

Répondre

25

En supposant que vous a attribué les ByteBuffer à l'aide ByteBuffer.allocateDirect() Use GetDirectByteBufferAddress

jbyte* bbuf_in; jbyte* bbuf_out; 

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

Le type de retour de GetDirectBufferAddress est nul *, vous devez jeter un jbyte *: bbuf_in = (jbyte *) (env *) -> GetDirectBufferAddress (env, buf1); // C bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // C++ –

+1

@ Error454 Ceci est C, vous n'avez pas besoin de lancer 'void *' s –

+0

Vous avez besoin de lancer si vous avez -Wedantic –