2010-04-20 3 views
16

의 ByteBuffer 매개 변수를 기본 방법 : javah의의 C에 의해 생성 된JNI - 내가하는 방법이있어

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

/이 방법의 C++ 헤더는 다음과 같습니다

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

가 어떻게 데이터 배열을 얻을 수 있습니다 jobject (즉, ByteBuffer 인스턴스)에서? bbuf_in = (jbyte *() :

답변

25

당신은 ByteBuffer.allocateDirect를 사용하여 ByteBuffer를() Use GetDirectByteBufferAddress

jbyte* bbuf_in; jbyte* bbuf_out; 

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

GetDirectBufferAddress의 반환 형식이 무효 *입니다, 당신은 jbyte *로 캐스팅 할 필요가 할당 가정하면 env *) -> GetDirectBufferAddress (env, buf1); // C bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // C++ –

+1

@ Error454 이것은 C 다.'void *'를 캐스팅 할 필요가 없다. –

+0

-Wpedantic을 가지고 있다면 캐스트해야한다. –