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

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

相关文章:

  • 网站被攻击有什么办法呢?
  • Nginx反向代理WebSocket
  • 【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
  • SQL布尔盲注、延迟注入和堆叠注入
  • Python 数据分析(PYDA)第三版(一)
  • 一、OpenAI API介绍
  • 多路服务器技术如何处理大量并发请求?
  • 探索C语言中的联合体与枚举:数据多面手的完美组合!
  • 哪种安全数据交换系统,可以满足信创环境要求?
  • 1897_野火FreeRTOS教程阅读笔记_链表
  • Mac 安装 Homebrew
  • [蓝桥杯 2022 省 A] 选数异或 题解 含源码
  • Ubuntu 命令与脚本
  • Msql-数据库死锁
  • RabbitMQ详解
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 4个实用的微服务测试策略
  • Docker入门(二) - Dockerfile
  • Linux各目录及每个目录的详细介绍
  • ng6--错误信息小结(持续更新)
  • Python - 闭包Closure
  • yii2中session跨域名的问题
  • 关于 Cirru Editor 存储格式
  • 理清楚Vue的结构
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何实现 font-size 的响应式
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 小程序button引导用户授权
  • 硬币翻转问题,区间操作
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 带你开发类似Pokemon Go的AR游戏
  • 组复制官方翻译九、Group Replication Technical Details
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ###C语言程序设计-----C语言学习(6)#
  • #etcd#安装时出错
  • #include<初见C语言之指针(5)>
  • #pragma data_seg 共享数据区(转)
  • #考研#计算机文化知识1(局域网及网络互联)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ZT)出版业改革:该死的死,该生的生
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Linq学习笔记
  • (转)Sql Server 保留几位小数的两种做法
  • (转)平衡树
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ./configure,make,make install的作用
  • .net 发送邮件
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET正则基础之——正则委托