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.
阅读全文
0 0
- QT 下调用lua自定义模块
- QT/C++ 下调用python自定义模块
- QT 下调用python自定义模块
- Lua 调用自定义C模块
- Lua 调用自定义C模块
- Lua 调用自定义C模块(练习)
- lua不同模块调用
- lua 调用c模块
- lua调用c模块
- Lua 调用其他模块
- Cocos2d-x下Lua调用自定义C++类
- Qt自定义QML模块
- Lua自定义方式加载模块
- Lua自定义方式加载模块
- python调用自定义模块
- Lua调用自定义C++类
- 以自定义方式加载 lua 模块
- 以自定义方式加载 lua 模块
- 正则表达式的常用表示方法
- PHP的冒泡排序
- Android学习笔记12---Fragment
- Java字符串String的解析
- 1-wire单总线浅谈之(一)--协议时序
- QT 下调用lua自定义模块
- error C3872: “0x3000”: 此字符不允许在标识符中使用错误 的解决办法
- 递归-OpenJudge-1750:全排列
- Ajax提交与传统表单提交的区别说明
- 深入了解 WPF Dispatcher 的工作原理(PushFrame 部分)
- CodeForces 864F Cities Excursions
- c++类的嵌套定义
- java stringbuffer stringbuilder
- ZBUS = MQ + RPC