通过JNI将std :: byte *传递给Java

时间:2020-06-18 12:00:25

标签: java android c++ android-ndk-r5

试过这个:

onclick

Java函数签名:

        void sendInfo(std::byte* something, long dataSize) {

    JavaVM* vm = nsCtx.javaVM;
    JNIEnv* env;
    int envState = getEnvState(&env, vm);

    if (envState == JNI_OK || envState == JNI_EDETACHED) {
        LOGD("Environment received successfully");

        jbyteArray byteArray;

        if(!byteArray)
            byteArray = env->NewByteArray(dataSize);

        if(env->GetArrayLength(byteArray) != dataSize)
        {
            env->DeleteLocalRef(byteArray);
            byteArray = env->NewByteArray(dataSize);
        }

        LOGD("byte array is created");

        void *temp = env->GetPrimitiveArrayCritical((jarray)byteArray, 0);

        LOGD("Worked fine");

        memcpy(temp, something, dataSize);
        env->ReleasePrimitiveArrayCritical(byteArray, temp, 0);

        jmethodID SendFunc = env->GetMethodID(someClass, "something",
                                               "([B)V");

        // Call the method on the object
        env->CallVoidMethod(someObject, SendFunc, byteArray);

        if (env->ExceptionCheck()) {
            env->ExceptionDescribe();
        }
        //if thread was attached to it, detach it
        if(envState == JNI_EDETACHED) {
            vm->DetachCurrentThread();
            LOGD("Thread detached");
        }
    } else {
        //Returns JNI_ERR
        LOGD("JNI ERROR occurred");
    }
}

,但出现一些DALVIk错误。有人可以解释如何在java函数中以byte []数组的形式将std :: byte *传递给Java。我对这个概念完全陌生,无法正常工作。

0 个答案:

没有答案