2010-04-20 13 views
16

Mam metodę:JNI - rodzimy metoda z parametrem ByteBuffer

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

Wygenerowane przez javah C/nagłówek C++ tej metody jest:

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

Jak mogę uzyskać tablicę danych od jobject (czyli instancji ByteBuffer)?

Odpowiedz

25

Zakładając przeznaczyło ByteBuffer korzystając ByteBuffer.allocateDirect() Use GetDirectByteBufferAddress

jbyte* bbuf_in; jbyte* bbuf_out; 

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

Rodzaj powrót GetDirectBufferAddress jest void *, trzeba oddać go do jbyte *: bbuf_in = (*) (jbyte env *) -> GetDirectBufferAddress (env, buf1); // C bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // C++ –

+1

@ Error454 To jest C, nie musisz rzucać 'void *' s –

+0

Musisz rzucić, jeśli masz -Wpedantic –