- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 LuaInterface 2.0.3 在我的 C# 应用程序中嵌入一些 Lua 脚本功能。到目前为止,这工作得很好,但我不知道如何限制对少数指定 .Net 类的访问。默认情况下,所有 .Net 库都可以通过“luanet”直接访问,Lua 脚本可以自由打开新窗口或访问文件系统。
例如这个 Lua 脚本将打开一个新窗口:
Form = luanet.System.Windows.Forms.Form
mainForm = Form()
mainForm:ShowDialog()
编写脚本的自由很棒,但这可能会干扰托管应用程序,并且会产生一些我不太喜欢的与安全相关的影响。有什么方法可以禁用它吗?
最佳答案
--make a table for all the classes you want to expose
safeClasses = {}
--store all the ones you want
safeClasses.Form = luanet.System.Windows.Forms.Form
--etc...
--remove access to LuaInterface
luanet = nil
package.loaded.luanet = nil
--prevent future packages from being loaded
require = nil
package.loadlib = nil
您也可以反过来执行此操作,首先删除全局和存储的 LuaInterface 实例,然后通过本地引用完成所有工作(block 其余部分的所有代码都可以使用):
--get a local reference to LuaInterface without clobbering the name
local luainterface = luanet
--delete the global reference to it
luanet = nil
--also delete it from the package store and disable package loading
package.loaded.luanet = nil
require = nil
package.loadlib = nil
--put luanet back locally at its original name (for convenience)
local luanet = luainterface
--make a table for all the classes you want to expose
safeClasses = {}
--store all the ones you want
safeClasses.Form = luanet.System.Windows.Forms.Form
--etc...
(您可以通过直接本地化到 luanet
来避免上面的三步名称保留舞蹈 (local luainterface=luanet; luanet=nil; local luanet=luainterface
)然后通过对全局表的 _G
引用删除全局:
local luanet=_G.luanet
_G.luanet = nil
我只是出于个人喜好选择不这样做。)
关于c# - LuaInterface - 如何限制对 .Net 类的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171381/
我发现我在 C#/Lua LuaInterface 项目中有严重的内存泄漏。我用 C# 编写了一个简单的测试函数,它每 0.5 秒从 Lua 循环调用一次。我可以看到 Lua 内存使用量随着每个循环而
我正在尝试使用 LuaInterface 加载 .net 程序集。如果我将程序集放在与我的可执行文件(以及我的 LuaInterface.dll 和 LuaNet.dll)相同的文件夹中,那么一切都很
我是 LuaInterface 的新手,有一个非常简单的问题:如何从 C# 访问多维 lua 表中的数据?我设法读取了字符串和整数值,但对表格并不幸运。我的目标是在(虚拟)GridView 中显示多维
我在 C# 中使用 LuaInterface,并且我“导出”了一些要在 Lua 中使用的自定义 C# 类。例如: local myVector = Vector2(10, 100) 但是,当我想像本例
我正在尝试使用 LuaInterface 将 Lua 脚本接口(interface)集成到我的 C# 项目中。 . 如果我执行语法正确的代码,它会按预期工作,但是一旦在脚本中引入语法错误(或任何其他错
我正在尝试将 LuaInterface 集成到 C# 中,但当我尝试将 C# 函数绑定(bind)到 Lua 时,出现了 System.NullReferenceException 。我尝试编译和运行
我一直在尝试使用 LuaInterface 将 Lua 集成到我的托管代码中。我正在使用我下载的程序集附带的 lua51.dll,但是当我尝试创建一个新的 Lua 对象时,构造函数失败并显示 ERRO
我有一些后台 lua 代码,我在每次启动时加载它们,它们工作正常,但有什么方法可以将它们转换为 C# 吗? 这是我的元表代码: player = {} player.__index = player
使用 NLua 运行 lua 脚本时如何调用函数? (一个 LuaInterface 分支)? 例如,现在我有: lua.LoadFile("C:\\test.lua") lua.Call(); 但是
我的 C# 代码中有一个字节数组,我需要将其传递给 LuaInterface 实例。我可以在 Lua 中使用 pack(),将生成的字符串传递给 C# 并使用 System.Text.Encoding
我正在使用 LuaInterface 将 LuaInterface 集成到 C# 程序中。我希望能够编写可以在程序中访问 C# 方法的脚本。 它访问的方法在单独的“子系统”中,我想让 Lua 方法定义
有没有人知道如何编写一个返回 LuaTable 值的 C# 函数(例如 {1 = "example1", 2 = 234, "foo"= "Foo Example"} ?我测试过的所有类型都返回非 p
我将 LuaInterface 导入到控制台项目中,引用它,并编写了一个小测试脚本。当我运行它时,我得到这个: Could not load file or assembly 'LuaInterfac
我正在尝试使用 LuaInterface 2.0.3 在我的 C# 应用程序中嵌入一些 Lua 脚本功能。到目前为止,这工作得很好,但我不知道如何限制对少数指定 .Net 类的访问。默认情况下,所有
我已将 LuaInterface 项目嵌入到使用 .NET Framework 4.0 以 C# 编写的应用程序中。编译 LuaInterface 和 Lua 5.1 后,我在我的应用程序中引用了它们
我有一个 Lua 模块 ( lpack ),我需要加载到 LuaInterface 中。我已经为该项目尝试了几种不同的配置,但我似乎无法弄清楚链接。 我收到错误 unresolved external
我想传递一个 WinForm 对象给 Lua,我的代码: //Form1.cs class Form1 { private System.Windows.Forms.TextBox textBox
当我尝试使用 LuaInterface 时在 Linux 上的 Mono 上(在 Ubuntu 9.04 上使用 Mono 2.0)我得到以下异常: ** (App.exe:8599): WARNIN
我正在尝试将 Lua 连接到我正在制作的 VB.net 游戏。现在,我已经阅读了足够多的内容,知道我可以像这里看到的那样自行连接每个函数: pLuaVM.RegisterFunction("quit"
因为我的游戏,我真的很想用 Mono-usable,似乎不能在 Linux 下运行,因为 LuaInterface 是个 SCSS (参见 the relevant SO thread 了解更多信息)
我是一名优秀的程序员,十分优秀!