2011-11-03 32 views
7

Làm thế nào tôi có thể nhận được một con trỏ tới mảng bên trong của một ByteBuffer Java?Lấy con trỏ của một ByteBuffer Java mặc dù 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: Tôi đang làm điều đó để chia sẻ bộ nhớ được sử dụng bởi Java và C++.

+2

Bạn có thể làm rõ những gì bạn đang yêu cầu không? Nếu bạn cần trả về 2 thứ thì trả về một cấu trúc. – Pubby

+0

Có 'm_buffer' đã trỏ đến bộ nhớ được cấp phát không? Nếu vậy, tại sao bạn nói 'new'? –

+0

Tôi đã viết lại câu hỏi –

Trả lời

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

ByteBuffer phải là một trực tiếp cho việc này để làm việc.

+0

Đây chính xác là những gì tôi cần. Cảm ơn bạn! –

+0

Tôi nghĩ rằng 'Byte * data = env-> GetDirectBufferAddress (obj);' sẽ mô tả hơn. – Patrick

0

Nếu bạn đang cố gắng để trả về địa chỉ của phần tử đầu tiên trong vòng m_buffer, sau đó bạn chỉ có thể làm:

return m_buffer;

..or:

return &m_buffer[0]

Các vấn đề liên quan