Red de conocimiento informático - Material del sitio web - Cómo utilizar el lenguaje de programación Lua en Java

Cómo utilizar el lenguaje de programación Lua en Java

LuaJava es en realidad una biblioteca que sigue la documentación oficial de Lua y encapsula la interfaz C de Lua en Java a través de JNI. Descárgalo, es un .dll y un .jar. Coloque el .dll en java.library.path y el .lib en el classpath y helloworld se ejecutará normalmente.

Sin embargo, durante las pruebas, descubrimos rápidamente el primer problema: al llamar al método LuaState.pushInteger proporcionado por LuaJava, se produjo un error: "¿Error de enlace insatisfecho? ¿Y otro LuaState.pushNumber? El método es normal. Después de verificar con la herramienta Depende, se descubre que el .dll en realidad no exporta la función pushInteger

(1). Descargue el código fuente de LuaJava y verifique Luajava.c y Luajava.h. Encontré algunos problemas, la definición JNI en .h corresponde a la función C de la función Java

JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger?

Pero esta función no está implementada en .NET Framework No lo sé, supongo que el descuido puede ocurrir en cualquier lugar. Afortunadamente tengo el código fuente, así que agregué la implementación de esta función en Luajava.c,

(2). La documentación oficial dice que se puede compilar con VC, pero no dice qué versión estoy usando VC2005, pero no funciona. Afortunadamente, Luajava es relativamente pequeño y solo tiene un .h y un .c. un nuevo .dll en VC Project, agregar archivos, cambiar los parámetros de compilación (Incluir necesita agregar el archivo de encabezado lua, lib necesita agregar el archivo lua .lib y también seleccionar? Construir y pasar). Entonces puedes llamar a pushInteger sin problemas en el método Java.

Durante la prueba, descubrí que la documentación proporcionada por Luajava describe con gran detalle cómo llamar objetos/métodos Java desde scripts Lua, pero no describe cómo hacerlo. llamar a las funciones de Lua/leer retornos desde Java. Consultando la documentación de Lua C en http://www.lua.org/manual/5.1/manual.html#lua_CFunction?, implementé el código para pasar objetos a Lua y obtenerlos. el valor de retorno:

Prueba1: Prueba para pasar un tipo simple y obtener el valor de retorno:

Script Lua (test.lua):

prueba de función( a, b)

devolver un b

p>

final?

Código Java:

estático {