2011-11-03 3 views
7

Как я могу получить указатель на внутренний массив Java ByteBuffer?Получить указатель на Java ByteBuffer, хотя 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: Я делаю это для обмена памятью, используемой Java и C++.

+2

Не могли бы вы уточнить, что вы спрашиваете? Если вам нужно вернуть 2 вещи, верните структуру. – Pubby

+0

«m_buffer» уже указывает на выделенную память? Если да, то почему вы говорите «новый»? –

+0

Я переписал вопрос –

ответ

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

ByteBuffer должен быть прямым для этого.

+0

Это именно то, что мне нужно. Спасибо! –

+0

Я думаю, что 'Byte * data = env-> GetDirectBufferAddress (obj);' будет более описательным. – Patrick

0

Если вы пытаетесь вернуть адрес первого элемента в m_buffer, то вы можете просто сделать:

return m_buffer;

..or:

return &m_buffer[0]