0Pricing
Lua Academy · Pelajaran

Memanggil Fungsi Lua dari C

Muat dan jalankan skrip serta fungsi Lua dari kode C.

Memanggil Fungsi Lua dari C adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Gambaran Umum

Untuk memanggil fungsi Lua dari C: dorong fungsi, dorong argumen, panggil lua_pcall, lalu baca hasilnya dari stack.

Memuat Skrip Lua

luaL_dofile(L, filename) memuat dan menjalankan file Lua. Atau gunakan luaL_loadfile + lua_pcall untuk memisahkan pemuatan dan pemanggilan.

// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
  fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
  lua_pop(L, 1);
}

Mendapatkan Fungsi Global

Gunakan lua_getglobal(L, "funcName") untuk mendorong fungsi global Lua ke stack.

// 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) memanggil fungsi di stack. Jika berhasil, fungsi ini mengembalikan LUA_OK dan meninggalkan hasil di 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);
}

Beberapa Nilai Pengembalian

Tentukan nresults dalam lua_pcall untuk membaca beberapa nilai pengembalian. Nilai-nilai tersebut didorong ke stack secara berurutan.

// 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

Teruskan LUA_MULTRET sebagai nresults untuk menerima semua nilai pengembalian dari fungsi. Periksa lua_gettop(L) setelahnya untuk mengetahui jumlah nilai yang dikembalikan.

Penangan Error

Teruskan errfunc yang bukan nol ke lua_pcall untuk menggunakan penangan error khusus. Penangan tersebut menerima objek error dan dapat menambahkan informasi pelacakan balik.

// 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);

Memanggil Metode pada Objek

Untuk memanggil metode objek Lua: dorong metode, dorong objek (self), dorong argumen lain, lalu lakukan pemanggilan.

Meneruskan Tabel sebagai Argumen

Buat tabel di stack dengan lua_newtable, isi field menggunakan lua_setfield, lalu sertakan tabel tersebut sebagai argumen fungsi.

Registri Referensi

Gunakan luaL_ref(L, LUA_REGISTRYINDEX) untuk menyimpan nilai Lua di registri dan mendapatkan kunci bilangan bulat untuk mengambilnya nanti.

// 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);

Pembersihan

Selalu keluarkan nilai stack yang tidak digunakan. Stack yang tidak seimbang akan menumpuk setelah banyak pemanggilan dan akhirnya mengalami overflow. Periksa ukuran stack dalam build debug.

Pertanyaan tentang lua_pcall

Apa yang dilakukan oleh lua_pcall(L, 2, 1, 0)?

Ringkasan: Memanggil Lua dari C

Dorong fungsi + argumen, panggil lua_pcall, periksa kode pengembalian, lalu baca hasil dari stack. Gunakan luaL_ref untuk menyimpan callback Lua untuk digunakan nanti. Selalu keluarkan nilai stack yang tidak digunakan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memanggil Fungsi Lua dari C” gratis?

Ya — teks lengkap “Memanggil Fungsi Lua dari C” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Memanggil Fungsi Lua dari C”?

Muat dan jalankan skrip serta fungsi Lua dari kode C. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Memanggil Fungsi Lua dari C” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Model Stack API C Lua
  2. Memanggil Fungsi Lua dari C
  3. Mendaftarkan Fungsi C dalam Lua
  4. Mengelola Keadaan dan Menangani Galat
← Kembali ke Lua Academy