1

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

Lua Java Binding 中是否有 lua_newuserdata 等效项?我正在使用 jnlua 库。

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

4

1 回答 1

1

我认为luaState.pushJavaObject(Object)并且luaState.pushJaveObjectRaw(Object)是您正在寻找的方法 :) 可悲的是,看不到这一点,而且至少对我来说,从来源来看也不是很清楚。

编辑:是的,是的。查看来自./main/c/jnlua.cjnlua 来源)的这段代码:

/* ---- Java objects and functions ---- */
/* Pushes a Java object on the stack. */

static void pushjavaobject (lua_State *L, jobject object) {
    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 error: NewGlobalRef() failed pushing Java object");
            lua_error(L);
    }
    lua_setmetatable(L, -2);
}
于 2013-09-11T12:44:10.443 回答