Qt编译lua库并调用
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;
}
#### 运行测试