您的位置:首页 > 编程语言 > Lua

QT 下调用lua自定义模块

2017-09-26 12:24 288 查看

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt lua