C++项目中添加调用Lua脚本

前言

最近想着,如果进程在运行时,可以调用Lua、JS之类的脚本语言,那么对于策划来说,原本需要填很多行的数据,现在只需填一个公式就搞定了。但是一开始对于这些的需求,我是拒绝的,因为一直觉得在C++环境中添加脚本支持是非常复杂的一件事情。

JS or Lua ?

既然想着用脚本,那么首先想到的就是js、lua。因为之前做过cocos2dx-js开发的,它用的js引擎是SpiderMonkey,太庞大了,所以不做考虑…
然后就剩下lua了,做了这么多年开发,听到过不少关于lua的话题。比如ios下的一个按键精灵的进程,就是可以让用户用lua来写进程。而且cocos2dx本身也有一个lua的版本,也是被很多开发者所采用的,所以技术上应该没什么问题。再加上lua语言本身就具有与C++语言交互方便的优势,所以就决定选择Lua。

实现

既然确定用lua了,那就开始动手了。
官网地址
在下载页面可以看到,官网已经提供了lua的源码,以及各个平台的二进制版本的下载。因为考虑到不同平台下的二进制文档不一样。所以这里我下载的源码(直接把源码加到工程里面编译)
把下载下来的源码文档加到工程里面去,这里需要注意的是:需要去掉其中的lua.c 和luac.c这两个文档。
执行编译,顺利完成!

测试

在测试的c++文档中引用lua的头文档

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
#ifdef __cplusplus   
    extern "C"  
{  
    #endif  
    #include "lua.h"  
    #include "lualib.h"  
    #include "lauxlib.h"  
    #ifdef __cplusplus  
}  
#endif  

—|—

测试lua脚本的执行

1  
2  
3  
4  
lua_State * state = luaL_newstate();  
luaL_openlibs(state);  
luaL_dostring(state, "print("hello lua")");  
lua_close(state);  

—|—

成功输出hello lua!(这一步完成,就已经说明在c++代码中使用lua脚本,完全没有问题了)
lua也提供了luaL_dofile()的函数,可以执行lua文档。

[](http://xtutu.me/#%E8%BF%9B%E4%B8%80%E6%AD%A5%E4%BA%86%E8%A7%A3

“进一步了解”)进一步了解

接下就是c++与lua之间传递数据的方式,所用到的堆栈结构也是挺巧妙的。这里就不再展开了,大家自行研究。


小结

把lua嵌入到c++中,整个过程也就半个小时,对lua的印象还是相当不错的~

糖果

糖果
LUA教程

Lapis框架的常用处理方法

Lapis框架的常用处理方法 Continue reading

MoonScript实现选择排序

Published on February 26, 2017

MoonScript与Redis客户端

Published on January 19, 2017