QT 下调用lua自定义模块

来源:互联网 发布:算法是什么意思 编辑:程序博客网 时间:2024/05/22 17:34

1.环境准备

下载地址
http://lua-users.org/wiki/LuaBinaries 转到http://luabinaries.sourceforge.net/ 最终下载地址
https://sourceforge.net/projects/luabinaries/files/5.3.4/Windows%20Libraries/Dynamic/

下载动态链接库
下载下来文件结构为:

这里写图片描述

2.程序中引用

1.导入库
项目–右键–添加库 –添加lua的动态库库

2.工程代码

extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"}#include <string>#include <QDir>using namespace std;lua_State *L =NULL;void MainWindow::on_pushButton_4_clicked(){    //1.创建Lua状态    L=luaL_newstate();    luaL_openlibs(L);    if (L == NULL)    {        return ;    }    qDebug() << QDir::currentPath();    //2.加载Lua文件    int bRet = luaL_loadfile(L,"./plugins/hello.lua");    if(bRet)    {        qDebug()<<"load file error";        return ;    }    //3.运行Lua文件    bRet = lua_pcall(L,0,0,0);    if(bRet)    {        qDebug()<<"pcall error";        return ;    }    //4.读取变量    lua_getglobal(L,"str");    string str = lua_tostring(L,-1);    qDebug()<<"str = "<<str.c_str();        //str = I am so cool~    //5.读取table    lua_getglobal(L,"tbl");    lua_getfield(L,-1,"name");    str = lua_tostring(L,-1);    qDebug()<<"tbl:name = "<<str.c_str(); //tbl:name = shun    //6.读取函数    lua_getglobal(L, "add");        // 获取函数,压入栈中    lua_pushnumber(L, 10);          // 压入第一个参数    lua_pushnumber(L, 20);          // 压入第二个参数    int iRet= lua_pcall(L, 2, 1, 0);// 调用函数,调用完成以后,会将返回值压入栈中,2表示参数个数,1表示返回结果个数。    if (iRet)                       // 调用出错    {        const char *pErrorMsg = lua_tostring(L, -1);        qDebug() << pErrorMsg ;        lua_close(L);        return ;    }    if (lua_isnumber(L, -1))        //取值输出    {        double fValue = lua_tonumber(L, -1);        qDebug() << "Result is " << fValue ;    }    //至此,栈中的情况是:    //=================== 栈顶 ===================    //  索引  类型      值    //   4   int:      30    //   3   string:   shun    //   2   table:     tbl    //   1   string:    I am so cool~    //=================== 栈底 ===================    //7.关闭state    lua_close(L);}

这里要注意的是lua文件放置的目录,QDir::currentPath()路径在哪,lua文件就要放置在对应的目录下,此例子中。路径为QDir::currentPath()+”/plugins/hello.lua”;

完美输出结果。

程序发行时,要带上lua53.dll.