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++技术分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

worthsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值