【发布时间】:2012-11-14 19:47:04
【问题描述】:
我需要有关我的 android 项目的帮助。 我想将一个缓冲区从 java 传递给 jni,我的 C++ 代码将填充数据。然后java会将它们显示在屏幕上。 我对 C++ 不太熟悉,也不知道如何写入缓冲区。
这就是我得到的。 在java中
ByteBuffer bb = ByteBuffer.allocateDirect(216);
IssmJni.processBuffer(bb);
本机方法
public static native void processBuffer(ByteBuffer bb);
我不使用 jni_onload,所以没有 javah 在 C++ 中
static void fillBuffer(JNIEnv *env, jclass clazz, jobject buf)
{
double *dBuf = env->GetDirectBufferAddress(env, buf);
}
我卡在这里,我可以做双dbuf吗?还是必须是字符?
说我要给这个dbuf写1,2,3,4,5,我该怎么做呢? 我在想 dbuf.put(1); ... dbuf.put(5) 但它不起作用。 填充它之后,我只是在java中调用 bb.get(position) 吗?
请有人为我澄清一下,示例将不胜感激 谢谢
这是我的本地方法表
静态 JNINativeMethod 方法表[] = {
{"fac" , "(J)J" , (void *) factorial},
{"getBuffer", "()[D" , (void *) getBufferNative},
//{"processBuffer", "(Ljava/nio/ByteBuffer)V", (void *) fillBuffer}};
除最后一个外,其他两个工作正常。
【问题讨论】:
-
IM 遇到以下问题:env->GetDirectBufferAddress(env, buffer);
标签: java android c++ android-ndk java-native-interface