Chiamata delle funzioni Lua da C
Carichi ed esegua script e funzioni Lua dal codice C.
Chiamata delle funzioni Lua da C è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Panoramica
Per chiamare una funzione Lua dal codice C: inserisca la funzione, inserisca gli argomenti, chiami lua_pcall, quindi legga i risultati dallo stack.
Caricamento di uno script Lua
luaL_dofile(L, filename) carica ed esegue un file Lua. In alternativa, utilizzi luaL_loadfile + lua_pcall per separare caricamento e chiamata.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Recupero di una funzione globale
Utilizzi lua_getglobal(L, "funcName") per inserire nello stack una funzione globale Lua.
// 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) chiama la funzione presente nello stack. In caso di successo restituisce LUA_OK e lascia i risultati nello stack.
// 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);
}Più valori restituiti
Specifichi nresults in lua_pcall per leggere più valori restituiti. Questi vengono inseriti nello stack nell'ordine.
// 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
Passi LUA_MULTRET come nresults per accettare tutti i valori restituiti dalla funzione. Controlli lua_gettop(L) in seguito per sapere quanti valori sono stati restituiti.
Gestore degli errori
Passi un errfunc diverso da zero a lua_pcall per utilizzare un gestore degli errori personalizzato. Il gestore riceve l'oggetto errore e può aggiungere informazioni sul traceback.
// 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);Chiamata di metodi sugli oggetti
Per chiamare il metodo di un oggetto Lua: inserisca il metodo, inserisca l'oggetto (self), inserisca gli altri argomenti, quindi esegua la chiamata.
Passaggio di tabelle come argomenti
Crei una tabella nello stack con lua_newtable, popoli i campi con lua_setfield, quindi la includa come argomento della funzione.
Registro dei riferimenti
Utilizzi luaL_ref(L, LUA_REGISTRYINDEX) per memorizzare un valore Lua nel registro e ottenere una chiave intera con cui recuperarlo in seguito.
// 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);Pulizia
Rimuova sempre i valori inutilizzati dallo stack. Gli stack non bilanciati si accumulano dopo molte chiamate e finiscono per andare in overflow. Controlli la dimensione dello stack nelle build di debug.
Domanda su lua_pcall
Che cosa fa lua_pcall(L, 2, 1, 0)?
Riepilogo: chiamare Lua dal codice C
Inserisca la funzione e gli argomenti, chiami lua_pcall, controlli il codice restituito, quindi legga i risultati dallo stack. Utilizzi luaL_ref per memorizzare callback Lua da usare in seguito. Rimuova sempre i valori inutilizzati dallo stack.
Domande Frequenti
La lezione «Chiamata delle funzioni Lua da C» è gratuita?
Sì — il testo completo di «Chiamata delle funzioni Lua da C» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Chiamata delle funzioni Lua da C»?
Carichi ed esegua script e funzioni Lua dal codice C. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Chiamata delle funzioni Lua da C»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Modello dello stack dell'API C di Lua
- Chiamata delle funzioni Lua da C
- Registrazione delle funzioni C in Lua
- Gestione dello stato e degli errori