C++ 调用lua 脚本

需求:

使用Qt/C++ 调用 lua 脚本 扩展原有功能。

步骤:

1,工程中引入 头文件,库文件。lua二进制下载地址(Lua Binaries

2, 调用脚本内函数。

这里调用lua 脚本中的process函数,并传入16进制,假设为 温度 湿度数据。并打印函数返回的字符串。

复制代码
#include <QCoreApplication>
#include <lua.hpp>
#include <ostream>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //初始化
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);

    //lua脚本
    const char* luaFileName = "my.lua";
    if(luaL_dofile(L,luaFileName)==0){
        const char* fun = "process";
        // 获取全局函数
        lua_getglobal(L, fun);

        if(lua_isfunction(L,-1)){
            //调用函数
            const char* data = "1245";
            lua_pushstring(L,data);
            //传入1个参数,期望一个返回值
            lua_pcall(L,1,1,0);

            //获取返回值
            const char* result = lua_tostring(L,-1);
            std::cout<<"Result from lua:"<<result<<std::endl;
        }else{
            std::cerr<<"Error: "<<fun<<"not found"<<std::endl;
        }
    }else{
        std::cerr<<"Error loading lua script: "<<lua_tostring(L,-1)<<std::endl;
    }

    lua_close(L);

    return a.exec();
}

3,编写my.lua脚本。

解析成两个uint8整型,假设为 温度 和湿度。

复制代码
function process(data)

    local temByte = string.sub(data, 1, 2)
    local temValue = tonumber(temByte, 16)

    local humByte = string.sub(data, 2, 3)
    local humValue = tonumber(humByte, 16)


    return "temperature: " .. tostring(temValue) .. " hum: " .. tostring(humValue)
end

4,效果

相关推荐
xiaoye-duck3 分钟前
《算法题讲解指南:优选算法-分治-快排》--45.数组中的第k个最大元素,46.最小的k个数
c++·算法
SCBAiotAigc4 分钟前
2026.3.7:具身智能之51单片机<二>:ISP烧录过程
c++·人工智能·单片机·嵌入式硬件·51单片机·c
tankeven9 分钟前
HJ125 最大最小路
c++·算法
AI-小柒9 分钟前
OpenClaw技术深度解析:从智能助手到自动化引擎的范式革命(附DataEyes实战)
大数据·运维·开发语言·人工智能·python·http·自动化
梦游钓鱼12 分钟前
Timestamp.cc和Timestamp.h文件分析
开发语言·c++
所谓伊人,在水一方33314 分钟前
【Python数据可视化精通】第1讲 | 数据可视化的本质与认知心理学基础
开发语言·python·信息可视化·matplotlib
所谓伊人,在水一方33316 分钟前
【Python数据科学实战之路】第18章 | 大模型与数据科学:LLM赋能数据分析新时代
开发语言·python·深度学习·神经网络·数据分析·tensorflow
十年编程老舅17 分钟前
Linux GDB 调试超详细教程:入门 + 实战
linux·c++·gdb
赵谨言23 分钟前
摘要本研究旨在构建一套基于OpenCV与CNN融合技术的银行卡号自动识别系统,重点解决不同银行卡号字体格式差异、倾斜污损等复杂场景下的识别难题
大数据·开发语言·经验分享·python
147API27 分钟前
Claude JSON 稳定输出:Schema 校验与修复回路(Kotlin)
开发语言·kotlin·json·claude