Senin, 08 Agustus 2011

Menghubungkan LUA dengan C++ Bagian 2

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

Tidak ada komentar:

Posting Komentar