Получить указатель Java ByteBuffer через JNI - PullRequest
8 голосов
/ 03 ноября 2011

Как я могу получить указатель на внутренний массив Java ByteBuffer?

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 ]

11 голосов
/ 04 ноября 2011
void * data = env->GetDirectBufferAddress(obj);

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

0 голосов
/ 03 ноября 2011

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

return m_buffer;

.. или:

return &m_buffer[0]

...