LuatOS开发之自定义C库 C与Lua调用

本文详细介绍了在LuatOS中如何进行C与Lua的调用,包括常用函数的使用,创建自定义模块的步骤,以及进阶的返回字符串和多输入多返回的函数实现。通过实例解析,帮助读者理解C和Lua之间的交互。
摘要由CSDN通过智能技术生成

一、前言

今天继续讲LuatOS的开发,上一期简单说了一下如何移植LuatOS,相信很多朋友已经看过了,那么今天,我就开始讲C和Lua调用的部分教程。

二、闲谈C与Lua的调用

1、先来个中文文档

https://www.runoob.com/manual/lua53doc/contents.html

2、简介

Lua 使用一个虚拟栈来和C互传值,也就是说,C和Lua的数据交互是在栈上进行的。

无论何时 Lua 调用 C,被调用的函数都得到一个新的栈, 这个栈独立于 C 函数本身的栈,也独立于之前的 Lua 栈。 它里面包含了 Lua 传递给 C 函数的所有参数, 而 C 函数则把要返回的结果放入这个栈以返回给调用者 。(关键词:入栈,压栈)

栈:要是你没接触过,就当他是个先入后出的大袋子,你要做的就是往里面放东西和拿东西。

C和Lua的调用说大白话就是:在栈上操作。

3、常用函数

lua_State :lua 虚拟机中的环境表、注册表、运行堆栈、虚拟机的上下文等数据。会在写函数的时候首先使用

常用判断函数:

lua_isboolean : lua_isboolean (lua_State *L, int index); 当给定索引的值是一个布尔量时,返回 1 ,否则返回 0 。

lua_isinteger: lua_isinteger (lua_State *L, int index); 当给定索引的值是一个整数时,返回 1 ,否则返回 0 。

lua_isnil : lua_isnil (lua_State *L, int index); 当给定索引的值是 nil 时,返回 1 ,否则返回 0 。

lua_isnumber: lua_isnumber (lua_State *L, int index); 当给定索引的值是一个数字,或是一个可转换为数字的字符串时,返回 1 ,否则返回 0 。

lua_isstring : lua_isstring (lua_State *L, int index); 当给定索引的值是一个字符串或是一个数字( 数字总能转换成字符串)时,返回 1 ,否则返回 0 。

lua_istable : lua_istable (lua_State *L, int index); 当给定索引的值是一张表时,返回 1 ,否则返回 0 。

常用检查函数:

luaL_checkinteger : luaL_checkinteger (lua_State *L, int arg); 检查函数的第 arg 个参数是否是一个 整数(或是可以被转换为一个整数) 并以 lua_Integer 类型返回这个整数值。

luaL_checknumber : luaL_checknumber (lua_State *L, int arg); 检查函数的第 arg 个参数是否是一个 数字,并返回这个数字。

luaL_

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值