Lua--3.编程
1 简介
1.1 介绍
Lua(鲁啊) 是一门强大、快速、轻量的嵌入式脚本语言。可以作为和C/C++执行脚本交互的语言。并且Lua的整个库很小,Lua 5.1版本整个静态链接的lua.dll才164KB,所以Lua很轻量,特别适合轻量级脚本嵌入。
1.2 版本
2 Lua机制
2.1 机制思路
2.2 lua接口函数
2.2.1 数据传递lua_to*
int lua_toboolean(lua_State *L, int index);
lua_Integer lua_tointeger(lua_State *L, int index);
const char *lua_tolstring(lua_State *L, int index);
lua_Number lua_tonumber(lua_State *L, int index);
void *lua_topointer(lua_State *L, int index);
const char *lua_tostring(lua_State *L, int index);
- lua_tonumber
lua_tonumber转换指定索引的值为数字(lua_Number默认为double)。这一lua值必须数字或可转换为数字的字符串(参考2.2.1),否则lua_tonumber返回0。
(int)lua_tonumber - lua_tostring将指定索引的值转换为字符串(const char*)。lua值必须为字符串或数字,否则返回NULL。当值为数字,lua_tostring将会把堆栈的原值转换为字符串(当lua_tostring应用到键值上时会使lua_next出现难以找出原因的错误)。lua_tostring返回一个完全对齐的字符串指针,这一字符串总是’/0’结尾(和C一样),但可能含有其它的0。如果你不知道一个字符串有多少个0,你可以使用lua_strlen取得真实长度。因为lua有垃圾收集机制,因此不保证返回的字符串指针在对应的值从堆栈中删除后仍然有效。如果你以后还要用到当前函数返回的字符串,你应当备份它或者将它放到registry中
lua_State数据结构
lua_State,我们可以认为是”脚本上下文”,主要是包括当前脚本环境的运行状态信息,还会有gc相关的信息。
luaL_newstate()
主要用于创建全局状态机。
lua_State *L = luaL_newstate(); 主要用于创建全局状态机。
3 混编
3.1 绑定Lua和C/C++的库
- CppLua
貌似13年后没更新 - tolua
最新版对应lua5.2.4的 - Luabind
利用boost机制把绑定做到极致, 比较适合主c++, 弱lua的脚本框架.
作者已经停止更新, 在windows/linux编译没问题, 但是在ios的LLVM下, 无法编译 - LuaPlus
接口较为简单, 适于初学者上手, 无任何的模板, 性能不高 - luaBridge
- tolua++
tolua++ is an extension of toLua, a tool to integrate C/Cpp code with Lua
tolua+±-git
tolua++ for 5.3 in archlinux
4 示例
参考
1、Lua数据结构 — lua_State(六)
2、Lua源码分析 - 基础篇 - 全局状态机的实现(02)
3、深入理解Lua的全局变量_G以及源码实现
4、《Lua编程入门》
5、超越luabind的luaBridge
6、Win32下 Qt与Lua交互使用(三):在Lua脚本中connect Qt 对象
7、(使用lua++)Lua脚本和C++交互(三)
8、tolua++中暴露对象给lua时,一定要把析构函数暴露给lua
9、tolua++实现lua层调用c++技术分析