问题标签 [luainterface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使用 LuaInterface 调用 lua 函数时读取返回参数
当我调用 DoString 时,我正在尝试处理从 lua 返回的参数:
lua 函数返回 nil、true 或 false 作为第一个参数和一个字符串作为第二个参数。
将参数作为 c# bool 和 string 值接收的最佳方式是什么?
非常感谢!
c# - Lua的跨平台C#实现
我正在寻找一种将 Lua 嵌入到我的跨平台嵌入应用程序中的方法。问题是——我还没有在这个平台上找到任何完整、稳定、有效的 Lua 实现。我尝试了以下方法(这里是存储库列表及其问题):
- LuaInterface - 要求我为每个平台编译一个 dll,不稳定,因为 v2 使用 Windows
- KopiLua - 错误,甚至他们自己的样本也不起作用
- AluminiumLua - 依赖于 DLL,因此,不是一个实现
- NLua - 基于 KopiLua 并继承所有问题
- UniLua - ...这是为了团结
此外,当我做一个简单的测试时,这些实现中的大多数都失败了:
它有时会引发错误,尤其是在 KopiLua 和 LuaInterface 上。
问题是:在 C# 中是否有任何完整、稳定的 Lua 实现,没有任何平台依赖?
c# - C# LuaInterface 类操作符
我在 C# 中使用 LuaInterface,并“导出”了一些自定义 C# 类以在 Lua 中使用。例如:
但是,当我想使用本例中的类运算符时:
我收到以下错误:尝试对本地“p1”(用户数据值)执行算术运算
该类的 C# 变体确实具有 + 运算符:
我知道您应该使用 Lua 元表并为 * 运算符添加一个函数到“__mul”。但是 LuaInterface 不是自动完成的吗?如果没有,我怎么能自己自动化呢?
c# - 使用 LuaInterface 返回一个字符串
所以,我正在尝试将 Lua 实现为 C# 中的脚本语言。如果您将它用作控制台应用程序的一部分,它真的很简单。但我希望能够在 XNA 中创建一个游戏机。问题是 Lua.DoString() 似乎返回一个控制台行,而不是一个字符串 - 正如我所说,这对于控制台应用程序来说很好,但我想将它作为字符串添加到输出缓冲区,以便我可以显示它在游戏中,而不是在控制台窗口中。如果这令人困惑,我深表歉意 - 希望代码能够清除它。
基本上,我很困惑为什么lua.DoString(input);
应该工作而不是必须使用Console.WriteLine(lua.DoString(input));
. 我什至尝试过outputBuffer.Add(lua.DoString(input).ToString());
,因为 ToString 在那里有效,理论上应该可以工作。相反,它执行lua.DoString
然后抛出异常 - “对象引用未设置为对象的实例”。除非我弄错了,否则有问题的对象是Lua
,它是lua
一个有效的对象引用。无论如何,鉴于这两种解决方案都不起作用,我想知道是否有人对 LuaInterface 有足够的了解,可以提出另一种获得相同结果的方法。我基本上想要一些效果outputBuffer.Add(lua.DoString(input));
。顺便说一句,我用来测试的 Lua 命令是print("test")
- 也许print
以某种方式返回控制台行而不是字符串,但我想不出另一种从 Lua 返回字符串的方法。
如果我的问题是杂乱无章或解释不清的,我深表歉意 - 我试图尽可能简洁,但这是一个小众问题,我真的不知道如何解释它。哦,我确实尝试过谷歌,我浏览了 Stack Overflow 上所有 65 个左右的 LuaInterface 问题,所以我有 95% 的把握在问这个问题之前已经做了尽职调查。我猜,LuaInterface 并不是一个众所周知的工具。
c# - LuaInterface C# 元表
我有一些后台 lua 代码,我在每次启动时加载它们,它们工作正常,但是有什么方法可以将它们转换为 C#?
这是我的元表代码:
它工作正常,这是我的代码目前的工作方式:
目前,我在注册 lua 函数代码中使用 void 搜索 Player.cs 对象,我的 C# 代码上没有任何特殊的 void 或函数,其中包含 Player 对象,但我想将它们全部更改为 Player 对象,还有什么方法我可以使用 Player.cs voids/strings 或来自 lua 的任何东西而不注册它们?Player.cs 对象是非静态的。
c# - C# LuaInterface 如何从 Lua 字符串中获取 System.String
我最近开始使用 LuaInterface 以便能够从 C# 程序运行 Lua 脚本。我写了一个返回字符串的测试脚本:
然后我尝试通过执行以下操作将其添加到 C# Queue <string
>:
但是,这不会返回字符串。相反,它返回 System.Object[]。我如何让它返回 System.String 呢?
c# - C# 和 Lua - 当前选项?
我创建了一个使用 LuaInterface 的 Mono 实现的应用程序,它在 Linux 上运行良好,没有任何障碍。我根本无法让 LuaInterface 与我的应用程序的 Windows 版本一起工作。我花了整整两天的时间试图让它发挥作用,我觉得我错过了一些非常基本的东西。
“最新”的 LuaInterface 是针对早期版本的 .NET 编译的,不适用于 4.0。我找到了一个指向针对 4.0 编译的 .dll 的链接,但该链接已失效。我尝试获取 LuaInterface 源并自己针对 4.0 进行编译,但 Visual Studio 2010 无法打开解决方案,因为不支持项目类型(或某些错误)。
我已经为 Windows 版本尝试过 MonoLuaInterface;尽管作者说它可以在 Windows 上运行,但显然不能。我一直遇到的错误是,无论我做什么,我都无法让程序检测到 luanet.dll。我试过把它放在与可执行文件相同的目录中,我试过设置LUA_PATH
和LUA_CPATH
启动,不管发生什么,它只是在第一次提到 luanet.dll 时抛出。我什至无法构建示例项目;他们找不到 luanet.dll 并且只是死在水中。
我也尝试过 NLua,那简直就是一场噩梦。
所以我的问题是:有没有人知道 Lua 在 .NET 上的任何其他(工作)实现?如果必须,我会重写大部分胶水代码,我只需要让它工作。或者,任何人都可以向我指出 luanet.dll 问题的一些解决方案,甚至是 LuaInterface 源问题的答案吗?
我知道这是一个非常广泛的问题,但我完全迷失了,完全不知道从哪里开始尝试解决这个问题。提前感谢任何有任何想法的人。
好的,我已经取得了一些进展。我再次尝试了NLua,并记住了它的问题。经过一些实验,这就是我发现的。
我使用的 Lua 脚本通过一个名为 EventManager 的导入类型与程序的其余部分交互,该类型在相关脚本的开头加载。EventManager 是一个单例,我立即使用代码分配实例:
从那时起,我在代码中使用 Event:whateverfunction() 调用公开的方法。如果我使用 NLua 的 DoString() 方法调用代码,这实际上可以正常工作。当我尝试在 Lua 端的协程中调用这些方法时,问题就出现了,这就是所有内容的实际编写方式。当我这样做时,NLua 会抛出 NullReferenceException。堆栈跟踪如下:
所以我更接近于解决这个问题,但我仍然不知道去哪里解决这个问题。
.net - .Net LuaInterface Hook 系统/事件
想知道是否可以在.Net 中使用 LuaInterface 创建挂钩系统 这个系统就像 Garry 的 Mod
我已经死在我的轨道上,试图弄清楚这将如何工作......
谢谢
c# - lua接口问题
我对 C# luainterface 库有一些问题:
1.所以我加载一个脚本并像这样提取它的功能:
但是,如果我加载两个包含同名函数的不同脚本会怎样。如何从script1和script2中提取两个同名的不同函数?
2.如果我将函数加载到内存中,是否可以处理一个特定的函数,而不是所有函数?
3.当我使用 Lua.DoFile 方法时,我想从文件中执行特定的功能。任何想法如何做到这一点?
编辑
2.我发现,我可以做这样的事情
但由于某种原因,我得到空异常。任何想法为什么?
c# - 在 Lua 中访问 userdata 属性和方法
我有一个关于在 LuaInterface 中访问用户数据类型的问题。当我将 C# 字典传递给 Lua 并尝试使用 ipairs 对其进行迭代时,我收到一个错误,因为 ipairs 需要一个表而不是 userdata 对象。
我想一种解决方案是在将 Dictionary 类型传递给 Lua 之前将其转换为 LuaTable 类型,但我想将 userdata 类型用于其中的一种用途是将 Dictionary 对象引入 Lua 并更新 customType 对象的字段和在 Lua 中调用他们的方法。我不知道这是否可能,但我很确定如果我将该 Dictionary 转换为字符串和整数的 LuaTable,我将失去任何直接与 Lua 中的 customType 交互的机会。
我在网上查找了有关在 Lua 中使用 userdata 的信息,但是我发现了几个通过 C/C++ 与 Lua 接口的示例以及我不太了解的堆栈。此外,在某些情况下使用 sizeof 方法,这在 c# 中没有简单的替代方法。有人可以给我一些指示吗?关于 C 中用户定义类型的 PIL 部分也没有太大帮助。