用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后的日志就看不到,程序挂掉
有哪位大师可以指点一二?
在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后的日志就看不到,程序挂掉
有哪位大师可以指点一二?
buffer多大? 是否为空?
代码写的应该没有问题。
在c++获取GetArrayLength的时候,发现长度和之前的长度并不相同了
这事怎么回事?