我有两个JNI功能。第一个允许程序员将任意Java对象传递给C ++:
void Java_org_love_Lua_pushLightUserdata( JNIEnv* env, jobject javaThis, jlong state, jobject value )
{
jobject* objectRef = lua_newuserdata( (lua_State*)state, sizeof( jobject ) );
*objectRef = (*env)->NewGlobalRef( env, value );
}
然后还有另一个检索此对象:
jobject Java_org_love_Lua_toUserdata( JNIEnv* env, jobject javaThis, jlong state, jint index )
{
jobject obj = *(jobject*)lua_touserdata( (lua_State*)state, (int)index );
return obj;
}
但是,由于某种原因,此函数始终向Java返回 null 值。我知道jobject本身很好,因为我也在使用这个方法来进行回调函数。这是我第一次真正尝试返回一个对象。我做错了什么?
答案 0 :(得分:1)
因为你没有返回你小心创建的全局引用,而是可能是一个长期陈旧的本地引用?