用java调用c++的时候,java传入一个byte数组
在c++的代码如下Java_com_backfire_Receiver(JNIEnv *env,jobject obj,jstring msg, jlong uid, jbyteArray buffer)
    {
        char *buf;
        jint len = 0;
        LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);//        return 0;
#if 1
        jboolean iscopy = JNI_FALSE;
        jbyte *b = env->GetByteArrayElements(buffer, &iscopy);
        LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);
        len = env->GetArrayLength(buffer);
        LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);        Client *c = g_game->get_client_by_uid(uid);
        if (c == NULL)
        {
            LOGD("err get_client_by uid\n");
            env->ReleaseByteArrayElements(buffer, b, 0);
            return -1;
        }        c->input_process((char *)b, len);
        LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);
        env->ReleaseByteArrayElements(buffer, b, 0);
        
        return 0;
#endif
    }
    
现在在程序里面一直打日志,在GetByteArrayElements之前还能看到日志,但是在GetByteArrayElements后的日志就看不到,程序挂掉
有哪位大师可以指点一二?

解决方案 »

  1.   

    jbyte *b = env->GetByteArrayElements(buffer, &iscopy);
    buffer多大? 是否为空?
    代码写的应该没有问题。
      

  2.   

    现在可以正常读取了,但是我遇到另一个问题
    在c++获取GetArrayLength的时候,发现长度和之前的长度并不相同了
    这事怎么回事?
      

  3.   

    你是说和java传进来byte Array长度不一样?
      

  4.   

    在java里面获取的长度和在c++通过GetArrayLength获取的长度不一样