2011-11-03 10 views
7

Jak uzyskać wskaźnik do wewnętrznej tablicy Java ByteBuffer?Uzyskaj wskaźnik Java ByteBuffer, ale 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: Robię to, aby udostępnić pamięć używaną przez Java i C++.

+2

Czy możesz wyjaśnić, o co prosisz? Jeśli chcesz zwrócić 2 rzeczy, zwróć strukturę. – Pubby

+0

Czy 'm_buffer' już wskazuje na przydzieloną pamięć? Jeśli tak, dlaczego mówisz "nowy"? –

+0

Napisałem pytanie –

Odpowiedz

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

ByteBuffer musi być bezpośredni, aby to działało.

+0

To jest dokładnie to, czego potrzebuję. Dziękuję Ci! –

+0

Myślę, że 'Byte * data = env-> GetDirectBufferAddress (obj);' byłoby bardziej opisowe. – Patrick

0

Jeśli starasz się zwrócić adres pierwszego elementu ciągu m_buffer, to można po prostu zrobić:

return m_buffer;

..or:

return &m_buffer[0]