我有两个 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 本身很好,因为我也在使用这个方法作为回调函数。不过,这是我第一次真正尝试返回一个对象。我做错了什么?
最佳答案
因为您没有返回您精心创建的全局引用,而是可能是一个长期陈旧的本地引用?
关于java - 在 Java 中返回一个全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493851/