我想知道如何将 Java 对象引用传递给 Lua
Lua Java Binding 中是否有 lua_newuserdata 等效项?我正在使用 jnlua 库。
创建 newuserdata 后,如何在 java 中使用 openlib 将其传递给 lua?
我认为luaState.pushJavaObject(Object)
并且luaState.pushJaveObjectRaw(Object)
是您正在寻找的方法 :) 可悲的是,看不到这一点,而且至少对我来说,从来源来看也不是很清楚。
编辑:是的,是的。查看来自./main/c/jnlua.c
(jnlua 来源)的这段代码:
/* ---- 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);
}