Berikut ini akan di demokan:
- Memanggil fungsi C++ dari dalam LUA
- Memanggil fungsi LUA dari dalam C++
Ayo kita mulai!
1. Buatlah project console di codeblocks.
2. Kemudian link kan Lua library ke dalam project.
3. Setelah itu ganti isi main.cpp dengan source code dibawah:
extern "C"
{
#include <lualib.h>
#include <lauxlib.h>
}
#include <iostream>
#include <string>
using namespace std;
// test.tampilkan(string)
static int tampilkan(lua_State *s)
{
// ambil parameter yang dimasukan Lua
const char *str = luaL_checkstring(s, 1);
cout << str << endl;
cout << "Fungsi C++ berhasil dipanggil Lua.." << endl;
lua_pushboolean(s, true); // return true
return 1; // 1 adalah jumlah return
}
int main()
{
// opens Lua
lua_State *L = luaL_newstate();
// opens the standard libraries
luaL_openlibs(L);
// daftar fungsi-fungsi C++ yg bisa dipanggil Lua
static luaL_Reg const callbacks[] =
{
{ "tampilkan",&tampilkan },
{ NULL, NULL }
};
luaL_register(L, "test", callbacks);
// test adalah nama custom library
// sehingga di Lua bisa dipanggil:
// test.tampilkan('Hello World!')
lua_pop(L, 1); // kosongkan stack
// buka file contoh.lua
// di contoh.lua akan dipanggil test.tampilkan('Hello World!')
luaL_loadfile(L, "contoh.lua");
lua_pcall(L, 0, 0, 0);
// panggil fungsi Lua
lua_getglobal(L, "fungsi_lua_tampilkan");
// eksekusi fungsi_lua_tampilkan
lua_pcall(L, 0, 0, 0);
// panggil fungsi_lua_penambahan(nilai1,nilai2)
lua_getglobal(L, "fungsi_lua_penambahan");
lua_pushnumber(L, 1); // nilai1 == 1
lua_pushnumber(L, 2); // nilai2 == 2
// eksekusi dengan 2 arguments dan 1 return
lua_pcall(L, 2, 1, 0);
// dapatkan hasil penambahan 1+2
double hasil = lua_tonumber(L, -1);
lua_pop(L, 1); // pop returned value
cout << "1 + 2 = " << hasil << endl;
// tutup Lua
lua_close(L);
return 0;
}
4. Buatlah sebuah file teks bernama contoh.lua dan copy paste code dibawah:
function fungsi_lua_tampilkan()
test.tampilkan('Mencoba memanggil fungsi C++');
end
function fungsi_lua_penambahan(nilai1,nilai2)
return (nilai1 + nilai2)
end
5. Kompile dan run. Outputnya adalah:
Mencoba memanggil fungsi C++
Fungsi C++ berhasil dipanggil Lua..
1 + 2 = 3