cocos使用tolua++将c++类暴露给lua,下面是tolua++的使用介绍。
tolua++的工作原理!
1、tolua++是使用c语言、利用lua提供的的c api编写的一个程序,这个程序解析一个声明了需要导出的类的文本文件,生成一个C++代码文件。
2、我们将生成的代码文件加入到自己的工程中,并调用其中的一个接口函数,就可以将我们定义的类暴露给lua了!
如何使用tolua++!
1、编译tolua++,得到tolua.exe和静态库tolua.lib
2、定义我们需要导出的类test.cpp和test.h,并编写一个main函数
3、使用tolua.exe,根据test.h生成一个c++代码文件
4、在工程中包含这个代码文件,并在程序中调用其中的接口函数
详细的步骤!
1、下载tolua++,安装相应版本的lua
2、打开tolua++里面win32文件夹,用vs打开里面的sln
3、配置工程的.h和.lib包含目录,以包含lua
4、编译生成tolua.exe
5、新建一个静态库工程
6、将tolua根目录里面的src/lib里面的代码文件添加到工程
7、添加lua的lib,配置以便找到lua的头文件
8、编译生成tolua.lib
9、新建一个测试工程,包含的文件有:
main.cpp
// 包含pkg文件生成的tolua.cpp文件需要的tolua代码!
#pragma comment(lib,"libproject.lib")
// 包含需要的lua代码用来解析lua文件!
#pragma comment(lib,"lua5.1.lib")
// 下面是一个正常的包含lua的程序!
#include <iostream>
using namespace std;
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
// 这个函数在tolua.cpp中实现的,但是tolua没有生成相应的头文件,我们需要自己申明一下!
// 这个函数完成了将cpp类暴露给lua!
int tolua_cpp_open(lua_State*);
int main()
{
lua_State* L = lua_open();
luaL_openlibs(L);
// 暴露pkg中定义的类到lua!
tolua_cpp_open(L);
luaL_dofile(L, "test.lua");
lua_close(L);
return 0;
}
test.cpp
#include "test.h"
#include <iostream>
void my_class::greet( char * _str,int _cnt)
{
for( int i = 0; i < _cnt; ++ i){
std::cout << _str << std::endl;
}
}
my_class::my_class(){}
my_class::~my_class(){}
test.h
class my_class
{
public:
my_class();
~my_class();
void greet(char*,int);
};
tolua_wrapper.cpp
/*
tolua生成的文件没有包含test.h,如果我们直接修改生成的tolua.cpp,
则每次重新生成都需要进行修改,而且vs还会提醒重新载入,很麻烦,所以用这
个cpp文件包装一下生成的tolua.cpp!
*/
#include "test.h"
// 这是tolua生成的cpp文件,里面有一个函数可以将pkg里面的类导出到lua中!
#include "tolua.cpp"
10、在测试工程的源码目录新建test.pkg文件
class my_class
{
public:
my_class();
~my_class();
void greet(char*,int);
};
11、新建tolua.bat文件,当然你需要保证可以找到你的tolua.exe
tolua.exe -n cpp -o tolua.cpp test.pkg
tolua生成的接口函数名称和-n有关,如果是XXX,则接口函数为tolua_XXX_open
-o是输出文件名,随意;最后是输入文件名
12、运行tolua.bat生成tolua.cpp
13、编写测试用的lua脚本文件test.lua
local t = my_class()
t:greet( ":)", 3)
你应该看到lua打印出了三个笑脸!
你可以下载测试工程:
http://pan.baidu.com/s/1eQrFafg
本文介绍了如何使用tolua++将c++类暴露给lua。通过编译tolua++,生成C++代码文件,然后在工程中调用接口函数实现类的导出。详细步骤包括tolua++的安装、编译,以及lua脚本的编写和测试。最终,通过lua脚本验证了c++类的导出成功。

4712

被折叠的 条评论
为什么被折叠?



