在lua中新建内嵌库

Posted 两片空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在lua中新建内嵌库相关的知识,希望对你有一定的参考价值。

 Lua库

介绍:

        实际lua中的库是一个table,table中有不同的函数。比如string库是一个table,table中有不同的函数。

Lua库有两种:一种是内嵌库,一种是共享库。

共享库:

        有一个lua本体,我用C写一个库,在lua中require("xxx")该文件。

内嵌库:

        在lua内部用C代码加一个库。

两种库在写法上差不多,实际内嵌库是和lua一起打包编译,共享库是自己打包编译,lua在对其进行调用。

 制作一个内嵌Lua的 C库

在lua源文件中添加一个文件testlib.c

库的实现: 

  将库加入到lua中:

找到linit.c文件:

 首先要在lualib.h头文件中声名初始化函数的声明:

 将库加入lua中:第一个参数是库名,第二个参数是库初始化函数。

实际lua库是一个table:

私有栈:

 查看文档:

 总结:

  1. lua栈是相互独立的,临时的。
  2. lua栈是用来实现lua和c进行数据传输的。
  3. lua私有栈并不遵守栈的规律,可以用下标进行访问,访问规则遵循lua的规律。

Lua如何向私有栈传值:

        在函数调用时,写入值即可。如下:

        会按顺序入栈

 c结构给lua返回值:

        C函数处理完lua传过来的数据后,将结果入栈。return表示返回值ide个数,即需要的结果。在lua中用变量进行接收。

 小实验,c函数将lua传过来的值原样返回给lua:

 

 

 用C来操作Lua传过的数据,再返回给Lua。

 在C语言中使用处理Lua传过来数据的接口:

与类型相关的接口:

 type_name与type_typename使用:

 ​​

 其他接口使用查看文档。LuatOS 文档

 特别说一下:

 读取数据的接口:

 

返回肯定是一个整形

 

返回是整形或者浮点形。 

 

 

 参数数据实际都获得了,但是由于C语言字符串以'\\0'结尾,所以后面的字符串没有显示,可以根据返回的字符串长度,继续从s后面读取,知道到达长度。

 

 

 

 


 

以上是关于在lua中新建内嵌库的主要内容,如果未能解决你的问题,请参考以下文章

Lua快速上手

Lua快速上手

Nginx内嵌Lua脚本提高分布式缓存命中率

如何在Windows平台使用VS搭建C++/Lua的开发环境

nginx lua 安装

Redis深度解析(19)-Lua脚本