Lua-Funktionen aus C aufrufen
Laden und führen Sie Lua-Skripte und -Funktionen aus C-Code aus
Lua-Funktionen aus C aufrufen ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick
Um eine Lua-Funktion aus C aufzurufen, legen Sie die Funktion und die Argumente auf den Stack, rufen Sie lua_pcall auf und lesen Sie anschließend die Ergebnisse vom Stack.
Ein Lua-Skript laden
luaL_dofile(L, filename) lädt eine Lua-Datei und führt sie aus. Alternativ können Sie luaL_loadfile + lua_pcall für getrenntes Laden und Aufrufen verwenden.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Eine globale Funktion abrufen
Verwenden Sie lua_getglobal(L, "funcName"), um eine globale Lua-Funktion auf den Stack zu legen.
// 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) ruft die Funktion auf dem Stack auf. Bei Erfolg gibt die Funktion LUA_OK zurück und lässt die Ergebnisse auf dem Stack liegen.
// 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);
}Mehrere Rückgabewerte
Geben Sie nresults in lua_pcall an, um mehrere Rückgabewerte auszulesen. Sie werden in der entsprechenden Reihenfolge auf den Stack gelegt.
// 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
Übergeben Sie LUA_MULTRET als nresults, um alle Rückgabewerte der Funktion zu übernehmen. Prüfen Sie anschließend lua_gettop(L), um die Anzahl der Rückgabewerte zu ermitteln.
Fehlerbehandler
Übergeben Sie lua_pcall ein von null verschiedenes errfunc für einen benutzerdefinierten Fehlerbehandler. Der Behandler erhält das Fehlerobjekt und kann Traceback-Informationen hinzufügen.
// 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);Methoden auf Objekten aufrufen
Um eine Lua-Objektmethode aufzurufen, legen Sie die Methode, das Objekt (self) und die übrigen Argumente auf den Stack und führen Sie anschließend den Aufruf aus.
Tabellen als Argumente übergeben
Erstellen Sie mit lua_newtable eine Tabelle auf dem Stack, befüllen Sie ihre Felder mit lua_setfield und übergeben Sie sie anschließend als Funktionsargument.
Referenz-Registry
Verwenden Sie luaL_ref(L, LUA_REGISTRYINDEX), um einen Lua-Wert in der Registry zu speichern und einen ganzzahligen Schlüssel für den späteren Abruf zu erhalten.
// 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);Aufräumen
Entfernen Sie ungenutzte Stack-Werte immer. Unausgeglichene Stacks sammeln sich über viele Aufrufe hinweg an und laufen schließlich über. Prüfen Sie die Stack-Größe in Debug-Builds.
lua_pcall-Frage
Was bewirkt lua_pcall(L, 2, 1, 0)?
Zusammenfassung: Lua aus C aufrufen
Legen Sie die Funktion und die Argumente auf den Stack, rufen Sie lua_pcall auf, prüfen Sie den Rückgabecode und lesen Sie anschließend die Ergebnisse vom Stack. Verwenden Sie luaL_ref, um Lua-Callbacks für später zu speichern. Entfernen Sie ungenutzte Stack-Werte immer.
Lerne Lua mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 40
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Lua-Funktionen aus C aufrufen“ kostenlos?
Ja — der vollständige Text von „Lua-Funktionen aus C aufrufen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Lua-Funktionen aus C aufrufen“?
Laden und führen Sie Lua-Skripte und -Funktionen aus C-Code aus Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Lua-Funktionen aus C aufrufen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Das Stack-Modell der Lua-C-API
- Lua-Funktionen aus C aufrufen
- C-Funktionen in Lua registrieren
- Zustandsverwaltung und Fehlerbehandlung