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

相关推荐

  1. 轻量脚本语言Lua的配置与c++调用

    2024-02-05 06:46:01       42 阅读
  2. 游戏辅助从0到1-C++调用游戏Lua脚本实现辅助

    2024-02-05 06:46:01       73 阅读
  3. Xlua分析:Lua调用C#

    2024-02-05 06:46:01       51 阅读
  4. Xlua分析:C#调用Lua

    2024-02-05 06:46:01       40 阅读
  5. Lua 如何在Lua调用C/C++函数

    2024-02-05 06:46:01       38 阅读
  6. 39、Lua调用C函数(lua-5.2.3)

    2024-02-05 06:46:01       33 阅读
  7. <span style='color:red;'>Lua</span><span style='color:red;'>脚本</span>

    Lua脚本

    2024-02-05 06:46:01      48 阅读
  8. LUA 调用c#关于c#报错时lua调用堆栈的监听

    2024-02-05 06:46:01       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 06:46:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 06:46:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 06:46:01       82 阅读
  4. Python语言-面向对象

    2024-02-05 06:46:01       91 阅读

热门阅读

  1. Linux inode

    2024-02-05 06:46:01       56 阅读
  2. @PostMapping/ @GetMapping等请求格式

    2024-02-05 06:46:01       53 阅读
  3. Flask 入门6:模板继承

    2024-02-05 06:46:01       51 阅读
  4. iOS 后台任务总结

    2024-02-05 06:46:01       40 阅读