Cómo comprobar los errores de lua al ajustar lua en c
Las funciones en Lua se llaman en forma de punteros de función, y todos los punteros de función deben ser de este tipo:
typedef int (*lua_CFunction) (lua_State * L);
En otras palabras, incluso si define una función en C como una función que toma lua_State como parámetro e int como valor de retorno, Lua no puede llamarla. Para que Lua lo llame, debe pasar lua_State como parámetro e int como valor de retorno. Pero no olvide que nuestro lua_State admite pilas, por lo que puede pasar una cantidad infinita de argumentos en la pila, limitados únicamente por el tamaño de la memoria. El valor int devuelto es solo el número de valores devueltos y el valor de retorno real se almacena en la pila lua_State. Un enfoque común es crear un contenedor para todas las funciones que deben llamarse, de modo que pueda llamar a cualquier función que desee.
[cpp] Ver copia simple
#includelt;iostreamgt;
Usar espacio de nombres std; /p>
extern "C" {
#include lt;lua.hgt;
#include lt;lualib.hgt
# incluir; lt; lauxlib.hgt;
}
//#pragma comentario(lib, "lua5.1.lib")
lua_State* L; p>
static int Average(lua_State *L)
{
// Devuelve el número de elementos en la pila
int n = lua_gettop( L );
doble suma = 0;
int i;
para (i = 1; i lt; = n; i)
{
if (!lua_isnumber(L, i))
{
lua_pushstring(L, "El parámetro de 'promedio' es incorrecto" )
lua_error(L);
}
suma = lua_tonumber(L, i);
/* Empujar el promedio*/
lua_ pushnumber(L, sum / n
/* Empujar la suma*/
lua_pushnumber( L, suma);
/* Devuelve el número de resultados*/
return 2
}
int main (int) argc, char*argv[])
{
/* Inicializar Lua */
L = lua_open()
/ * Cargar biblioteca Lua*/
luaL_ openlibs(L);
/* Registrar nuestras funciones*/
lua_register(L, "average", promedio)
/* Ejecutar script*/
luaL_dofile(L, "e15.lua");
lua_getglobal(L, "avg"); p >
coutlt;lt; "el promedio es:"lt;lt;lua_tointeger(L, -1)lt;lt;endl;
lua_pop(L, 1); p >lua_getglobal(L, "suma");
coutlt;lt; "la suma es: "lt;lt;lua_tointeger(L, -1)lt;endl; > /* Limpiar Lua */
lua_ close(L);
devuelve 0
}