tolua++入门

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代码派生实现。

推荐阅读