我需要帮助我的安卓项目。 我想从Java传递一个缓冲区到JNI,我的C++代码将填充数据。然后Java将在屏幕上显示它们。 我不太熟悉C++,也不知道如何写入缓冲区。
这是我得到的。 在Java中:
ByteBuffer bb = ByteBuffer.allocateDirect(216);
IssmJni.processBuffer(bb);
本地方法
public static native void processBuffer(ByteBuffer bb);
我不使用jni_onload,因此在C++中没有javah。
static void fillBuffer(JNIEnv *env, jclass clazz, jobject buf)
{
double *dBuf = env->GetDirectBufferAddress(env, buf);
}
我在这里遇到了困难,我能够使用双dbuf吗?还是必须使用char?
假设我想要将1、2、3、4、5写入这个dbuf,我该怎么做? 我考虑使用dbuf.put(1); … dbuf.put(5),但它不起作用。 在填充完毕后,在Java中我只需要调用bb.get(position)吗?
请有人为我澄清这个问题,最好能提供示例 谢谢
这是我的本地方法表
static JNINativeMethod method_table[] = {
{"fac" , "(J)J" , (void *) factorial},
{"getBuffer", "()[D" , (void *) getBufferNative},
//{"processBuffer", "(Ljava/nio/ByteBuffer)V", (void *) fillBuffer}};
除了最后一个之外,其他两个都没有问题。