• 在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后面读取,知道到达长度。

     

     

     

     


     

  • 相关阅读:
    【Web开发】Flask框架基础知识
    人体神经系统结构图高清,人体神经系统全貌图片
    将数组拆分成斐波那契序列
    RocketMQ并行消费浅析
    Linux安装Nginx的2种方式(Centos7版本)
    C++ 之 queue、stack、dueque队列
    SW利用点光源来校核
    【Ubuntu虚拟机】
    GTK构件 --- 文本视图控件GTKtextview
    ArcGIS中如何再画一个已经存在的相同属性地类图斑
  • 原文地址:https://blog.csdn.net/weixin_57023347/article/details/126219253