Qt编译lua库并调用
参考博客:
编译lua库
参考下面文章编译lua库文件
QT5.9学习笔记之QT编译lua库_qtluaintf.h-CSDN博客
https://blog.csdn.net/qq_23345187/article/details/112710677
Qt代码引用lua库文件
打开pro项目文件,右键空白处,点击添加库:
选择外部库:
如下选择静态库文件
代码调用
头文件只需要包含lua.hpp
#include “lua.hpp”
下面是封装好的一个参数:
QString CScriptDialog::procLuaFunc(const QString &luaStr, const QString &val)
{
lua_State *L;
qDebug()<< "*********luaStr: ", luaStr;
// luaStr = removeChar(luaStr, '\\');
// 初始化Lua
L = luaL_newstate();//新建lua虚拟机
if (L == NULL)
{
qDebug()<< "lua_open fault luaStr: ", luaStr;
return val;
}
// 加载Lua标准库
luaL_openlibs(L);
// 将Lua代码段转换为字符串,并传递给Lua执行
if (luaL_dostring(L, luaStr.toStdString().c_str()) != 0 ) {
lua_close(L);
qDebug("luaL_dostring fault: %s ", luaStr.toStdString().c_str());
return val;
}
// 获取函数名称
const char *func_name = "getValue";
lua_getglobal(L, func_name);
// 将参数压入Lua栈中
lua_pushstring(L, val.toStdString().c_str());
// 调用Lua中的函数
if (lua_pcall(L, 1, 1, 0) != 0) { // 第二个参数是传递给Lua的参数个数,第三个是从Lua返回的值个数
qDebug("lua_pcall fault: %s %s ", luaStr.toStdString().c_str(),lua_tostring(L, -1));
lua_close(L);
return val;
}
// 从Lua中获取返回值
if (!lua_isstring(L, -1)) {
qDebug("Function {} did not return a string.", func_name);
lua_close(L);
return val;
}
QString retVal = lua_tostring(L, -1);
// 打印返回值
qDebug()<<"*********Result: "<<retVal;
// 关闭Lua状态机
lua_close(L);
return retVal;
}
#### 运行测试