2010-04-20 15 views
16

मैं एक विधि है:JNI - ByteBuffer पैरामीटर के साथ देशी विधि

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

javah सी द्वारा उत्पन्न/इस विधि के सी ++ शीर्षक है:

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

मैं एक डेटा सरणी कैसे प्राप्त कर सकते हैं जॉबजेक्ट से (वह एक बाइटबफर उदाहरण है)? bbuf_in = (jbyte *) (:

उत्तर

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 * करने के लिए इसे कास्ट करने के लिए की जरूरत है आवंटित env *) -> GetDirectBufferAddress (env, buf1); // सी bbuf_in = (jbyte *) env-> GetDirectBufferAddress (buf1); // सी ++ –

+1

@ त्रुटि 454 यह सी है, आपको 'शून्य * ' –

+0

डालने की आवश्यकता नहीं है यदि आपके पास है - तो आपके पास –

संबंधित मुद्दे