当前位置: 首页 > article >正文

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,效果


http://www.kler.cn/a/232387.html

相关文章:

  • UNIX网络编程-TCP套接字编程(实战)
  • 路由器基本原理与配置
  • 二叉树遍历的非递归实现和复杂度分析
  • 【Three.js基础学习】22.New project structure
  • [DB]
  • 【智能电视??】关于电视、以及IPTV 和OTT TV区别(了解)
  • Ubuntu 1804 And Above Coredump Settings
  • re:从0开始的CSS学习之路 6. 字体相关属性
  • NLP自然语言处理
  • 【Java EE】----SpringBoot的日志文件
  • Window环境下使用go编译grpc最新教程
  • Text2SQL研究-Chat2DB体验与剖析
  • Kubernetes CNI Calico:Route Reflector 模式(RR) calico IPIP切换RR网络模式
  • 年假作业day2
  • Vue中路由守卫的详细应用
  • yo!这里是Linux线程保姆级入门介绍
  • vue百度地图的和element输入框/v-region的联动
  • springboo冬奥会科普平台源码和论文
  • D7 Elasticsearch-Mongodb(搜索记录)
  • flutter 国内源
  • python-分享篇-画樱花
  • 栈--数据结构
  • 龙芯安装Docker
  • 【CSS】margin塌陷和margin合并及其解决方案
  • K8S之Pod常见的状态和重启策略
  • java实战:销售订单号自动生成