Lua常用C Api接口

Lua 5.4 是 Lua 语言的一个版本,它提供了许多 C API 函数,这些函数允许开发者在 C 语言中嵌入和扩展 Lua 的功能。以下是一些常用的 Lua 5.4 C API 函数,以及它们的简单示例:

  1. lua_newstate - 创建一个新的 Lua 状态。

    c 复制代码
    lua_State *L = lua_newstate(0, 0); // 创建一个新的 Lua 状态
  2. lua_close - 关闭一个 Lua 状态。

    c 复制代码
    lua_close(L); // 关闭 Lua 状态
  3. lua_openlibs - 打开 Lua 的标准库。

    c 复制代码
    lua_openlibs(L); // 打开所有标准库
  4. lua_getglobal - 获取全局变量。

    c 复制代码
    lua_getglobal(L, "myGlobal"); // 获取名为 'myGlobal' 的全局变量
  5. lua_setglobal - 设置全局变量。

    c 复制代码
    lua_pushnumber(L, 42); // 将数字 42 推入栈
    lua_setglobal(L, "myGlobal"); // 将栈顶的值设置为全局变量 'myGlobal'
  6. lua_pcall - 调用一个函数。

    c 复制代码
    int status = lua_pcall(L, 0, LUA_MULTRET, 0); // 调用栈顶的函数
    if (status != LUA_OK) {
        // 处理错误
    }
  7. lua_pushnumber - 将一个数字推入栈。

    c 复制代码
    lua_pushnumber(L, 123); // 将数字 123 推入栈
  8. lua_pushstring - 将一个字符串推入栈。

    c 复制代码
    const char *str = "Hello, Lua!";
    lua_pushstring(L, str); // 将字符串 "Hello, Lua!" 推入栈
  9. lua_pushboolean - 将一个布尔值推入栈。

    c 复制代码
    lua_pushboolean(L, 1); // 将真值推入栈
  10. lua_pushnil - 将 nil 推入栈。

    c 复制代码
    lua_pushnil(L); // 将 nil 推入栈
  11. lua_pop - 从栈中弹出元素。

    c 复制代码
    lua_pop(L, 1); // 从栈中弹出一个元素
  12. lua_newtable - 创建一个新的空表。

    c 复制代码
    lua_newtable(L); // 创建一个新的空表
  13. lua_settable - 将一个值设置到表中。

    c 复制代码
    lua_newtable(L);		
    lua_pushstring(L, "key"); // 推入键
    lua_pushnumber(L, 123); // 推入值
    lua_settable(L, -3); // 将值设置到表中,表在栈的 -3 位置

效果:tk=v;

其中v是栈顶(-1)的值,k值栈顶下(-2)的键,即将这个键值对设置到表t(-3)中;

操作后-1、-2从栈中弹出,-3变成-1.

  1. lua_gettop - 获取栈顶的索引。

    c 复制代码
    int top = lua_gettop(L); // 获取栈顶索引
  2. lua_settop - 设置栈的顶部。

    c 复制代码
    lua_settop(L, 0); // 将栈顶设置为 0
  3. lua_load - 加载一个 Lua 脚本。

    c 复制代码
    int status = lua_load(L, my_reader, data, "script.lua");
    if (status != LUA_OK) {
        // 处理错误
    }
  4. lua_register - 注册 C 函数到 Lua 中。

    c 复制代码
    lua_register(L, "myCFunction", myCFunction); // 注册 C 函数
  5. lua_gettable - 获取表中指定键的值,放到栈顶(-1)。

    c 复制代码
    lua_pushnumber(L, 1);
    lua_gettable(L, -2);

把一个键压入栈顶,然后获取-2处的表,将表中键为1的值再次压入栈顶。

参考:https://www.cnblogs.com/chuanwei-zhang/p/4077247.html

相关推荐
魔力女仆13 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_8949155314 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
麻瓜老宋14 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
颜x小16 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_4236521316 小时前
C#使用JObject
开发语言·c#
国科安芯16 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
霸道流氓气质18 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
BerrySen17818 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
SilentSlot18 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
Nebula_g19 小时前
Java实现本地Socket通信(三)
java·开发语言·学习·socket·可视化