在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:
私有栈:
查看文档:
总结:
- lua栈是相互独立的,临时的。
- lua栈是用来实现lua和c进行数据传输的。
- 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中新建内嵌库的主要内容,如果未能解决你的问题,请参考以下文章