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.
相关文章推荐
- Lua 调用自定义C模块
- QT/C++ 下调用python自定义模块
- Lua 调用自定义C模块(练习)
- 【COCOS2DX-LUA 脚本开发之十四】解决自定义cpp类通过tolua++ binding LuaCocos2d后编译到Android运行黑屏(没有调用自定义cpp类)的问题!
- lua脚本调用cocos2dx项目中自定义的C++类
- lua 调用c模块
- Lua调用自定义C++类 和遇到的问题解决
- lua不同模块调用
- 自定义的模块调用magento默认编辑器WYSIWYG
- 【COCOS2DX-LUA 脚本开发之十四】解决自定义CPP类通过TOLUA++ BINDING LUACOCOS2D后编译到ANDROID运行黑屏(没有调用自定义CPP类)的问题!
- quick cocos2dx 3.3rc1 如何Lua调用自定义C++类(一)------ 生成桥接代码
- 用node来调用自定义模块
- Cocos2d-x下Lua调用自定义C++类
- Skynet服务器框架(七) Lua中调用自定义C库
- Silverlight5通过P/Invoke调用自定义C/C++ DLL(Lua)
- python 调用自定义的模块函数
- 【Lua C交互】2 - C调用lua模块
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践