相关疑难解决方法(0)

如何限制lua的可能性(调用OS功能,模块等)

我在我的C应用程序中使用Lua作为脚本语言.

它很适合我,但我无法理解如何限制Lua不要调用系统功能,包括其他模块等.

我希望Lua能够只调用我允许的函数,因为用户可以使用完整的Lua + Lua模块电源执行所有类型的错误操作.

lua

2
推荐指数
1
解决办法
1422
查看次数

使用句柄从.lua调用lua函数?

我正在研究一个试图将lua与c ++集成的小项目.我的问题如下:

我有多个lua脚本,我们称之为s1.lua s2.lua和s3.lua.其中每个都具有以下功能:setVars()和executeResults().

现在,我可以通过LuaL_dofile调用lua文件,并在使用setVars()和/或executeResults()之后立即调用.这里的问题是,在我加载s2.lua之后,我再也无法调用s1.lua的函数了.这意味着我必须重做s1.lua上的LuaL_dofile以重新获得对该函数的访问权限,这样我就无法访问s2.lua中的函数.

有没有办法简单地加载所有lua文件,然后开始随意调用它们的函数?类似于s1-> executeResults()s5-> executeResults()s3-> setVars()等.

我目前已经有一个系统使用boost :: filesystem来检测文件夹中的所有lua文件,然后我将这些文件名保存在一个向量中,然后简单地迭代向量以连续加载每个lua文件.

在使用lua文件名填充向量时,我的插件加载函数现在看起来像这样:

void Lua_plugin::load_Plugins(){
 std::vector<std::string>::const_iterator it;
 for (it=Lua_PluginList.begin(); it!=Lua_PluginList.end(); it++){
  std::cout<<"File loading: " << *it << std::endl;
  std::string filename =  *it;
  std::string filepath = scriptdir+filename;
  if (luaL_loadfile(L, filepath.c_str()) || lua_pcall(L, 0, 0, 0)) {
   std::cout << "ScriptEngine: error loading script. Error returned was: " << lua_tostring(L, -1) << std::endl;
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

为了使它更清楚一点,我在.lua中的所有内容都是这样的:

-- s1.lua

setVars()
--do stuff
end

executeResults()
--dostuff
end
Run Code Online (Sandbox Code Playgroud)

等,但我希望能够在连续加载两个之后调用s1.lua的setVars()和s2.lua的setVars().

c++ lua lua-api

1
推荐指数
1
解决办法
2701
查看次数

标签 统计

lua ×2

c++ ×1

lua-api ×1