Llamada a funciones de Lua desde C
Cargue y ejecute scripts y funciones de Lua desde código C.
Llamada a funciones de Lua desde C es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Descripción general
Para llamar a una función de Lua desde C: introduzca la función, introduzca los argumentos, llame a lua_pcall y, después, lea los resultados de la pila.
Cargar un script de Lua
luaL_dofile(L, filename) carga y ejecuta un archivo de Lua. También puede usar luaL_loadfile + lua_pcall para separar la carga de la llamada.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Obtener una función global
Use lua_getglobal(L, "funcName") para introducir una función global de Lua en la pila.
// C code
lua_getglobal(L, "myFunction"); // push function
lua_pushnumber(L, 10); // push arg1
lua_pushnumber(L, 20); // push arg2lua_pcall
lua_pcall(L, nargs, nresults, errfunc) llama a la función situada en la pila. Si tiene éxito, devuelve LUA_OK y deja los resultados en la pila.
// C code
if (lua_pcall(L, 2, 1, 0) != LUA_OK) {
fprintf(stderr, "Call error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
} else {
double result = lua_tonumber(L, -1);
lua_pop(L, 1);
printf("Result: %f\n", result);
}Múltiples valores devueltos
Especifique nresults en lua_pcall para leer varios valores devueltos. Se introducen en la pila en orden.
// C: calling a Lua fn that returns two values
lua_getglobal(L, "minmax");
lua_pushnumber(L, 5); lua_pushnumber(L, 3);
lua_pcall(L, 2, 2, 0);
double mn = lua_tonumber(L, -2);
double mx = lua_tonumber(L, -1);
lua_pop(L, 2);LUA_MULTRET
Pase LUA_MULTRET como nresults para aceptar todos los valores devueltos por la función. Compruebe después lua_gettop(L) para saber cuántos se devolvieron.
Manejador de errores
Pase un errfunc distinto de cero a lua_pcall para usar un manejador de errores personalizado. El manejador recibe el objeto de error y puede añadir información de trazabilidad.
// C: setup traceback handler
lua_getglobal(L, "debug");
lua_getfield(L, -1, "traceback");
lua_remove(L, -2); // remove debug table
int errhandler = lua_gettop(L);
// push fn and args, then:
lua_pcall(L, nargs, nresults, errhandler);Llamar a métodos sobre objetos
Para llamar a un método de un objeto de Lua: introduzca el método, introduzca el objeto (self), introduzca los demás argumentos y, después, realice la llamada.
Pasar tablas como argumentos
Cree una tabla en la pila con lua_newtable, rellene sus campos con lua_setfield y, después, inclúyala como argumento de la función.
Registro de referencias
Use luaL_ref(L, LUA_REGISTRYINDEX) para almacenar un valor de Lua en el registro y obtener una clave entera que permita recuperarlo posteriormente.
// C: store a callback for later use
lua_pushvalue(L, callbackIdx);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
// Later: lua_rawgeti(L, LUA_REGISTRYINDEX, ref);Limpieza
Extraiga siempre los valores no utilizados de la pila. Las pilas desequilibradas se acumulan después de muchas llamadas y terminan desbordándose. Compruebe el tamaño de la pila en las compilaciones de depuración.
Pregunta sobre lua_pcall
¿Qué hace lua_pcall(L, 2, 1, 0)?
Repaso: llamar a Lua desde C
Introduzca la función y sus argumentos, llame a lua_pcall, compruebe el código devuelto y, después, lea los resultados de la pila. Use luaL_ref para almacenar callbacks de Lua para usarlos posteriormente. Extraiga siempre los valores no utilizados de la pila.
Preguntas frecuentes
¿La lección «Llamada a funciones de Lua desde C» es gratis?
Sí — el texto completo de «Llamada a funciones de Lua desde C» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Llamada a funciones de Lua desde C»?
Cargue y ejecute scripts y funciones de Lua desde código C. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Llamada a funciones de Lua desde C»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Modelo de pila de la API C de Lua
- Llamada a funciones de Lua desde C
- Registro de funciones C en Lua
- Gestión del estado y los errores