lua与c的交互
2016-04-06 16:02
309 查看
Lua 是一门轻巧、灵活、扩展性很强的脚本语言,它可以很容易的嵌入到其他语言(C/C++)中使用,这主要得益于其提供了功能强大的 C API,这让其跟 C/C++ 间的互调成为一件很轻松的事。
Lua 调用 C
Lua 调用 C 函数,其实就是把 C 函数注册到 Lua 中去,把 C 函数地址传递给 Lua 解释器。这个传递是要遵循一个的协议的,即:
Lua 和 C 是通过栈(State)来交互的,Lua 调用 C 函数时,首先 Lua 把数据拷贝到栈上,然后 C 从栈上获取数据,调用结束后将返回结果放到栈中。栈中的每个数据通过索引值进行定位,索引值为正时表示相对于栈底的偏移索引,索引值为负时表示相对于栈顶的偏移索引,索引值以1或-1为起始值,因此栈顶索引值永远为-1 ,栈底索引值永远为1 。栈相当于数据在 Lua 和 C 之间的中转站,每一个 C 函数都有自己的独立的私有栈。
利用 Lua 提供的 C API,调用 C 函数很简单,例如下面例子:
把上面代码编译成一个静态资源的 so 文件,加入把上面代码保存在一个名为 mylib.c 的文件下,把它编译成一个名为 libmylib.so 的静态资源文件里,gcc 编译语句如下:
把上面代码放在 LUA_CPATH 目录下(LUA_CPATH 目录位置说明详看《Lua 学习笔记(4) -- 模块与包》,这里就不多说了)。
把 libmylib.so 资源文件加载到模块目录下后,就可以在 Lua 代码里直接加载 require 进来使用,例如如下使用:
Lua 调用 C
Lua 调用 C 函数,其实就是把 C 函数注册到 Lua 中去,把 C 函数地址传递给 Lua 解释器。这个传递是要遵循一个的协议的,即:
利用 Lua 提供的 C API,调用 C 函数很简单,例如下面例子:
把 libmylib.so 资源文件加载到模块目录下后,就可以在 Lua 代码里直接加载 require 进来使用,例如如下使用:
相关文章推荐
- Lua_第22章 Debug 库
- LuaFramework_UGUI学习笔记一
- Lua_第 21 章 操作系统库
- 关于lua中显示绝对时间和相对时间
- lua入门之二:c/c++ 调用lua及多个函数返回值的获取
- 立体匹配综述阅读心得之Classification and evaluation of cost aggregation methods for stereo correspondence
- 在Ubuntu 14.04 64bit上安装lua5.2
- lua5.3与C++交互学习(二)
- lua luaL_ref引用
- C/C++访问Lua中table元素方法总结
- ULUA的简洁用法
- luagd介绍
- C++混合编程之idlcpp教程Lua篇(5)
- lua基础——基本语法
- lua面向对象封装及元表(metatable)性能测试
- lua 入门
- eLua学习笔记1——为STM32编译elua
- 快速掌握Lua 5.3 —— 从Lua中调用C函数
- lua基础——安装使用以及helloworld
- Lua中rawset和rawget的使用方法