2013-09-11 1 views
1

Я хочу знать, как передать ссылку на объект Java в LuaPassing Java объект Ссылка на Lua

Есть lua_newuserdata эквивалент в Lua Java Binding? Я использую библиотеку jnlua.

После создания newuserdata, как передать его lua, используя openlib в java?

ответ

1

Я думаю, luaState.pushJavaObject(Object) и luaState.pushJaveObjectRaw(Object) - это методы, которые вы ищете :) К сожалению, я не вижу этого документально, и это не так ясно из источников, по крайней мере для меня.

EDIT: Да, это так. Посмотрите этот код с ./main/c/jnlua.c (jnlua sources):

/* ---- 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); 
}