0Pricing
Lua Academy · Lección

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 arg2

lua_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

  1. Modelo de pila de la API C de Lua
  2. Llamada a funciones de Lua desde C
  3. Registro de funciones C en Lua
  4. Gestión del estado y los errores
← Volver a Lua Academy