三、cocos是如何将c++类导出到lua的?
来源:互联网 发布:与制工作室长板淘宝 编辑:程序博客网 时间:2024/06/05 14:14
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
- 三、cocos是如何将c++类导出到lua的?
- cocos自定义类 绑定到lua
- Cocos如何绑定lua自定义类
- 将C++对象导出到lua,C++和lua的相互调用
- Cocos2d-x Lua 使用Cocos Studio导出的动画
- Cocos2d-x lua 使用Cocos Studio导出的动画
- 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
- Cocos2d-x lua 使用Cocos Studio导出的动画
- 如何导出 C和C++ 的API 给 Lua 使用
- 如何将lua移植到arm平台的linux内核
- cocos lua绑定感悟---tolua_isusertable及lua如何访问cocos静态函数的方法
- c接口导出到lua中使用
- cocos2d-x-lua如何导出自定义类到lua脚本环境
- C\C++和Lua是如何进行通信的?
- C\C++和Lua是如何进行通信的?
- 如何将MySQL数据表的结构导出到excel文件
- 如何将form里面的数据导出到excel中
- vb如何将查询到的记录导出为Excel
- 浅谈spring——增强接口(六)
- 四.Python流程控制の(二)逻辑符
- HDU 1176 免费馅饼
- SSH框架+Oracle整合之问题2
- 数据结构与算法分析学习笔记--第四章(二叉树:创建、递归遍历、非递归遍历、根据数据删除结点等)
- 三、cocos是如何将c++类导出到lua的?
- 母函数入门+模板
- 设计模式—原型、模板方法模式
- LeetCode First Missing Positive
- 日志打印的5点建议
- Oracle中dual表
- 内容显示页调用方法
- 快速排序
- emc测试中,esd里直接放电和间接放电是什么意思