2011-11-03 11 views
7

मैं जावा बाइटबफर के भीतरी सरणी में पॉइंटर कैसे प्राप्त कर सकता हूं?जावा बाइटबफर का सूचक प्राप्त करें हालांकि जेएनआई

JNIEXPORT void JNICALL test(JNIEnv *env, jobject thiso) { 
    jclass cls = env->FindClass("java/nio/ByteBuffer"); 
    jmethodID aloc = env->GetStaticMethodID(cls, "allocateDirect", "(I)Ljava/nio/ByteBuffer;"); 
    jobject obj = env->CallStaticObjectMethod(cls, aloc, 1000); 
} 

पीएस: मैं जावा और सी ++ द्वारा उपयोग की गई स्मृति को साझा करने के लिए ऐसा कर रहा हूं।

+2

क्या आप जो पूछ रहे हैं उसे स्पष्ट कर सकते हैं? यदि आपको 2 चीजें वापस करने की आवश्यकता है तो एक संरचना वापस करें। – Pubby

+0

क्या 'm_buffer' पहले ही आवंटित स्मृति को इंगित करता है? यदि हां, तो आप 'नया' क्यों कहते हैं? –

+0

मैंने कुछ शोध के बाद –

उत्तर

11
void * data = env->GetDirectBufferAddress(obj); 

इस काम के लिए बाइटबफर एक सीधा होना चाहिए।

+0

यह वही है जो मुझे चाहिए। धन्यवाद! –

+0

मुझे लगता है कि 'बाइट * डेटा = एनवी-> GetDirectBufferAddress (obj);' और अधिक वर्णनात्मक होगा। – Patrick

0

आप m_buffer भीतर पहला तत्व का पता वापस जाने के लिए कोशिश कर रहे हैं, तो आप सिर्फ कर सकते हैं:

return m_buffer;

..or:

return &m_buffer[0]

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