0Pricing
Lua Academy · Lekcja

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 arg2

lua_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

  1. Model stosu Lua C API
  2. Wywoływanie funkcji Lua z C
  3. Rejestrowanie funkcji C w Lua
  4. Zarządzanie stanem i obsługa błędów
← Powrót do Lua Academy