2010-04-20 6 views
16

У меня есть метод:JNI - нативный метод с параметром ByteBuffer

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

Порожденного javah C/C++ заголовка этого метода является:

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

Как я могу получить массив данных из jobject (то есть экземпляр ByteBuffer)?

ответ

25

Предполагая, что вы выделили ByteBuffer с помощью ByteBuffer.allocateDirect() Use GetDirectByteBufferAddress

jbyte* bbuf_in; jbyte* bbuf_out; 

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

Тип возврата GetDirectBufferAddress недействительна *, вам нужно, чтобы бросить его в jbyte *: bbuf_in = (jbyte *) (env *) -> GetDirectBufferAddress (env, buf1); // C bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // C++ –

+1

@ Error454 Это C, вам не нужно набрасывать 'void *' s –

+0

Вам нужно бросить, если у вас есть -Wpedantic –