Wywoływanie funkcji Lua z C
Proszę ładować i wykonywać skrypty oraz funkcje Lua z poziomu kodu C.
Wywoływanie funkcji Lua z C to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Wprowadzenie
Aby wywołać funkcję Lua z C, umieść na stosie funkcję i argumenty, wywołaj lua_pcall, a następnie odczytaj wyniki ze stosu.
Ładowanie skryptu Lua
luaL_dofile(L, filename) ładuje i wykonuje plik Lua. Możesz też użyć luaL_loadfile + lua_pcall, aby rozdzielić ładowanie i wywołanie.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Pobieranie funkcji globalnej
Użyj lua_getglobal(L, "funcName"), aby umieścić globalną funkcję Lua na stosie.
// 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) wywołuje funkcję znajdującą się na stosie. W przypadku powodzenia zwraca LUA_OK i pozostawia wyniki na stosie.
// 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);
}Wiele wartości zwracanych
Określ nresults w lua_pcall, aby odczytać wiele wartości zwracanych. Są one umieszczane na stosie w kolejności zwracania.
// 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
Przekaż LUA_MULTRET jako nresults, aby przyjąć wszystkie wartości zwracane przez funkcję. Następnie sprawdź lua_gettop(L), aby dowiedzieć się, ile wartości zwrócono.
Procedura obsługi błędów
Przekaż niezerową wartość errfunc do lua_pcall, aby użyć niestandardowej procedury obsługi błędów. Procedura ta otrzymuje obiekt błędu i może dodać informacje o śladzie wywołań.
// 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);Wywoływanie metod obiektów
Aby wywołać metodę obiektu Lua, umieść na stosie metodę, obiekt (self) oraz pozostałe argumenty, a następnie wykonaj wywołanie.
Przekazywanie tabel jako argumentów
Utwórz tabelę na stosie za pomocą lua_newtable, wypełnij jej pola przez lua_setfield, a następnie przekaż ją jako argument funkcji.
Rejestr referencji
Użyj luaL_ref(L, LUA_REGISTRYINDEX), aby przechować wartość Lua w rejestrze i uzyskać klucz całkowity, za pomocą którego można ją później pobrać.
// 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);Sprzątanie
Zawsze usuwaj ze stosu nieużywane wartości. Niezrównoważone stosy gromadzą wartości podczas kolejnych wywołań i ostatecznie się przepełniają. W kompilacjach debug sprawdzaj rozmiar stosu.
Pytanie o lua_pcall
Co robi lua_pcall(L, 2, 1, 0)?
Podsumowanie: wywoływanie Lua z C
Umieść na stosie funkcję i argumenty, wywołaj lua_pcall, sprawdź kod zwrotny, a następnie odczytaj wyniki ze stosu. Użyj luaL_ref, aby przechowywać wywołania zwrotne Lua do późniejszego użycia. Zawsze usuwaj ze stosu nieużywane wartości.
Często zadawane pytania
Czy lekcja „Wywoływanie funkcji Lua z C” jest bezpłatna?
Tak — pełny tekst „Wywoływanie funkcji Lua z C” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wywoływanie funkcji Lua z C”?
Proszę ładować i wykonywać skrypty oraz funkcje Lua z poziomu kodu C. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Wywoływanie funkcji Lua z C”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Model stosu Lua C API
- Wywoływanie funkcji Lua z C
- Rejestrowanie funkcji C w Lua
- Zarządzanie stanem i obsługa błędów