tolua++ 试用demo

    一直知道cocos2dx lua是经过tolua++导出lua接口的,但一直没本身去导过,最近比较闲,试了下。java

个人环境是:ubuntu ,安装好tolua++后就能够在命令行下试用 tolua++ 工具导出。ios

MyClass.cpp文件:ubuntu

#include <iostream>
#include "tolua++.h"

class MyClass
{
public:
    void say()
    {
        std::cout << "Hello World!" << std::endl;
    }
};

tolua++须要写pkg文件,相似于C++的.h文件,当时要过去掉关键字,MyClass.pkg函数

#include "MyClass.h"
class MyClass
{
    MyClass();
    ~MyClass();
    void say();
};

在终端执行: 工具

tolua++ -o MyClass.cpp MyClass.pkg   //-o MyClass.cpp 表示写入MyClass.cpp 文件。

执行完后,会生成MyClass.cpp文件,打开会发现有好几百行代码,会有一个测试

TOLUA_API int luaopen_MyClass (lua_State* tolua_S)

的定义,而后在该文件中加入对MyClass.h文件的引用lua

#include "string.h"
#include "tolua++.h"
...
#include "MyClass.h"
...
TOLUA_API int luaopen_MyClass (lua_State* tolua_S)  //该方法就是要导出到lua的方法

在MyClass.h文件中增长函数声明:spa

/* Exported function */
TOLUA_API int  tolua_MyClass_open (lua_State* tolua_S);

mytest.lua测试文件:命令行

local my = MyClass()
my:say()

经过main.cpp 文件来执行lua。code

#include <iostream>
#ifdef __cplusplus                                                                                                      
extern "C" {                                                                                   #endif                                                                           
#include "tolua++.h"                                                               
#ifdef __cplusplus
}                                                                 
#endif

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include "MyClass.h"
TOLUA_API int  tolua_MyClass_open (lua_State* tolua_S);
int main()
{
    lua_State* L = lua_open();
    luaL_openlibs(L);

    tolua_MyClass_open(L); 
    luaL_dofile(L, "mytest.lua"); // 执行lua脚本文件

    lua_close(L);
    return 0;
}

在终端输入:

g++ main.cpp MyClass.cpp -llua -ldl -ltolua++ -o test_lua

-lxx为g++的编译规则,表示须要连接的库文件。

结果就会打印出:hello world

相关文章
相关标签/搜索