經過上面的步驟,在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代碼派生實現。