2011-11-03 12 views
7

Come posso ottenere un puntatore all'array interno di un ByteBuffer Java?Ottieni il puntatore di un ByteBuffer Java anche se JNI

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); 
} 

PS: Lo sto facendo per condividere la memoria utilizzata da Java e C++.

+2

Potrebbe chiarire cosa stai chiedendo? Se hai bisogno di restituire 2 cose, restituisci una struttura. – Pubby

+0

'm_buffer' punta già alla memoria allocata? Se è così, perché dici "nuovo"? –

+0

Ho riscritto la domanda –

risposta

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

ByteBuffer deve essere diretto perché funzioni.

+0

Questo è esattamente ciò di cui ho bisogno. Grazie! –

+0

Penso che 'Byte * data = env-> GetDirectBufferAddress (obj);' sarebbe più descrittivo. – Patrick

0

Se stai cercando per restituire l'indirizzo del primo elemento all'interno m_buffer, allora si può solo fare:

return m_buffer;

..o:

return &m_buffer[0]

Problemi correlati