【问题标题】:Get the pointer of a Java ByteBuffer though JNI通过 JNI 获取 Java ByteBuffer 的指针
【发布时间】:2011-12-21 11:33:23
【问题描述】:

如何获得指向 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 个东西然后返回一个结构。
  • m_buffer 是否已经指向分配的内存?如果是这样,你为什么说new?
  • 经过一番研究,我重写了,现在更简单了

标签: java c++ android-ndk java-native-interface bytebuffer


【解决方案1】:

如果您想返回m_buffer 中第一个元素的地址,那么您可以这样做:

return m_buffer;

..或:

return &m_buffer[0]

【讨论】:

    【解决方案2】:
    void * data = env->GetDirectBufferAddress(obj);
    

    ByteBuffer 必须是直接的,这样才能正常工作。

    【讨论】:

    • 这正是我所需要的。谢谢!
    • 我认为Byte* data = env->GetDirectBufferAddress(obj); 会更具描述性。
    猜你喜欢
    • 2011-09-26
    • 2016-11-13
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2011-09-17
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多