将Java对象引用传递给Lua

我想知道如何将 Java 对象引用传递给 Lua。

Lua Java 绑定中是否有 lua_newuserdata 的等效方法?我正在使用 jnlua 库。

创建 newuserdata 后,如何在 Java 中使用 openlib 将其传递给 Lua?

点赞
用户1150918
用户1150918

我认为luaState.pushJavaObject(Object)luaState.pushJavaObjectRaw(Object)是您要找的方法 :) 不幸的是,我没看到这方面的文档,并且源代码也不那么清楚,至少对我来说是这样的。

编辑: 是的,它确实是。看一下./main/c/jnlua.c中的这段代码([jnlua源代码](https://code.google.com/p/jnlua/downloads/detail?name=jnlua-0.9.6-src.zip)):

/* ---- Java对象和函数 ---- */
/*将Java对象推入堆栈。*/

static void pushjavaobject(lua_State * L,jobject对象){
    jobject * user_data;

    user_data = (jobject *)lua_newuserdata(L,sizeof(jobject));
    luaL_getmetatable(L,JNLUA_OBJECT);
    * user_data =(* thread_env) - > NewGlobalRef(thread_env,object);
    if(!* user_data){
            lua_pushliteral(L,“JNI错误:NewGlobalRef()推送Java对象失败”);
            lua_error(L);
    }
    lua_setmetatable(L,-2);
}
2013-09-11 12:44:10