tolua++入門

tolua++使用SCons進行編譯,我們也可以使用自己喜歡的IDE新建一個控制檯(Console)工程,然後將源碼下bin目錄中所有文件加入到工程中,直接編譯即可;同樣地,新建一個靜態庫(Static Library)工程,將源碼下lib目錄中所有文件加入進入,編譯即可。當然了,這些工程是需要lua庫支持的,目前tolua++最新版本是1.0.93,支持lua 5.1.x。
經過上面的步驟,在Windows系統上的話,你會得到tolua++.exe和tolua.lib,前者是一個輔助工具,用來將.pkg文件(下面將會講到)轉換成源代碼,而後者則是我們需要在自己工程中加入的函數庫。
下面開始正式使用tolua++。

一開始,我們並不需要特別注意,按照自己的需要來撰寫完完全全的C++代碼,假設我們有一個基於控制檯的項目,名爲mytest,設置好項目屬性,包含必要的庫(包括lua和tolua++),添加如下代碼:

// file: UsingIt.h
#include <iostream>

class my_class
{
public:
    void greet()
    {
        std::cout << “Hello World!” << std::endl;
    }
};

下面撰寫我們的.pkg文件:

// file: mylib.pkg
$pfile “UsingIt.h”

class my_class
{
    my_class();
    ~my_class();

    void greet();
};
使用tolua++生成膠水函數實CPP文件:

tolua++ –n mylib –o mylib.cpp mylib.pkg
這條命令的意思是:使用tolua++程序,從mylib.pkg生成源代碼並輸出到mylib.cpp,而-n參數則是用來指定包名稱的(lua 中package name)。你會得到mylib.cpp,文件,其中包含一個很重要的函數:int tolua_<package name>_open(lua_State*)。"package name”就是用-n指定,這裏就是 int tolua_mylib_open(lua_State*),它的功能就是將你在.pkg文件中所撰寫的類、函數接口等註冊給lua,這個函數是需要你自己調用的。

回到我們的mytest項目,將上面得到的mylib.cpp文件加入到項目中,添加一個新文件Main.cpp:

// file: Main.cpp
#include <iostream>
#include <tulua++.h>
extern “C” {
#include <lua.h>
#include <luaxlib.h>
}
#include “UsingIt.h”

int main()
{
    lua_State* L = lua_open();
    luaL_openlibs();

    tolua_mylib_open(L); // 打開mylib
    luaL_dofile(L, “mytest.lua”); // 執行腳本文件

    lua_close(L);
    return 0;
}
mytest.lua腳本文件內容:

local my = my_class()
my:greet()

好了,編譯並運行你的mytest程序吧,你將看到 Hello World! 出現在你的屏幕上!
就說到這裏了,更深入的使用請參考tolua++的文檔,有一點需要注意的是,tolua++並不支持導出虛函數類供lua代碼派生實現。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章