Registrera C-funktioner i Lua
Exponera C-funktioner för Lua-skript med luaL_register och lua_pushcfunction.
Registrera C-funktioner i Lua är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.
Översikt
C-funktioner kan exponeras för Lua-skript. De måste ha signaturen int myFunc(lua_State *L). De läser argument från stacken och lägger returvärden på den.
C-funktionssignatur
Varje funktion som kan anropas från Lua är en lua_CFunction: den tar emot en lua_State*, läser argument, lägger resultat på stacken och returnerar antalet resultat.
// C code
static int l_add(lua_State *L) {
double a = luaL_checknumber(L, 1);
double b = luaL_checknumber(L, 2);
lua_pushnumber(L, a + b);
return 1; // one result
}Registrera som global
lua_pushcfunction(L, l_add) lägger C-funktionen på stacken. Därefter registrerar lua_setglobal(L, "add") den som en global funktion i Lua.
// C code
lua_pushcfunction(L, l_add);
lua_setglobal(L, "add");
// Now Lua can call: add(3, 4)luaL_newlib / luaL_register
Registrera en grupp C-funktioner som en Lua-modul med hjälp av en luaL_Reg-array och luaL_newlib.
// C code
static const luaL_Reg mylib[] = {
{"add", l_add},
{"mul", l_mul},
{NULL, NULL}
};
luaL_newlib(L, mylib);
lua_setglobal(L, "mylib");
// Lua: mylib.add(1, 2)Läsa argument
luaL_checknumber(L, n), luaL_checkstring(L, n) och så vidare läser och validerar argument. Vid fel typ utlöses ett Lua-fel.
Returnera flera värden
Lägg flera värden på stacken och returnera deras antal. Lua tilldelar dem som flera returvärden.
// C code
static int l_divmod(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
lua_pushinteger(L, a / b);
lua_pushinteger(L, a % b);
return 2; // two results
}Upvalues för C-closures
C-closures fångar upvalues när de registreras med lua_pushcclosure(L, fn, n). Kom åt upvalues med lua_upvalueindex(n).
Felrapportering från C
Anropa luaL_error(L, format, ...) för att utlösa ett Lua-fel från en C-funktion. Funktionen returnerar aldrig – den gör en longjmp till hanteraren för det skyddade anropet.
// C code
if (divisor == 0)
luaL_error(L, "division by zero at argument %d", 2);C-modul som .so/.dll
En C-modul exponerar en luaopen_modname-funktion. Lua:s require läser in det delade biblioteket och anropar funktionen för att initiera modulen.
// C code (shared library entry point)
int luaopen_mymod(lua_State *L) {
luaL_newlib(L, mymod_funcs);
return 1;
}Kontrollera antalet argument
Använd lua_gettop(L) för att kontrollera antalet skickade argument. luaL_checkany(L, n) säkerställer att minst n argument har angetts.
Alternativet LuaJIT FFI
LuaJIT:s FFI låter er anropa C-funktioner direkt från Lua utan att skriva C-kod för omslag. Det är ofta enklare för rena funktionsanrop. C API behövs för djupare integration.
Fråga om C-funktioner
Vad måste en C-funktion som kan anropas från Lua returnera?
Sammanfattning: registrera C-funktioner
C-funktioner som kan anropas från Lua har signaturen int f(lua_State*). Läs argument med luaL_check*, lägg resultat på stacken och returnera antalet. Registrera funktioner enskilt med lua_pushcfunction eller i grupp med luaL_newlib.
Lär dig Lua med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 40
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Registrera C-funktioner i Lua” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Registrera C-funktioner i Lua”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Registrera C-funktioner i Lua”?
Exponera C-funktioner för Lua-skript med luaL_register och lua_pushcfunction. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lua Academy?
Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Registrera C-funktioner i Lua”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lua Academy-lektionen?
Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Stackmodellen i Lua:s C-API
- Anropa Lua-funktioner från C
- Registrera C-funktioner i Lua
- Hantera tillstånd och fel