三、cocos是如何将c++类导出到lua的?

本文介绍了如何使用tolua++将c++类暴露给lua。通过编译tolua++,生成C++代码文件,然后在工程中调用接口函数实现类的导出。详细步骤包括tolua++的安装、编译,以及lua脚本的编写和测试。最终,通过lua脚本验证了c++类的导出成功。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值