问题标签 [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.

0 投票
1 回答
674 浏览

c# - Lua / LuaInterface - 如何访问 C# 属性?

我一直在寻找一种方法,以便在 Lua 脚本中我可以访问类的自定义属性。

我知道我可以实现一个普通的 C# 方法,并在该方法中使用普通反射访问属性,然后在 Lua 对象上执行 registerMethod。

但在这种情况下,我不想编写 C# 方法,而只是用 Lua 代码编写一个普通字符串,然后访问属性。

我的问题是怎么做?是做类似的事情的正确方法

0 投票
1 回答
1118 浏览

c# - 在我的 C# 应用程序中嵌入 lua:需要“luainterface”失败

我从他们的网站下载了最新版本的 LuaInterface,并引用了 LuaInterface.dll 和 Lua51.dll。解释器本身工作正常,但是当我尝试 require("luainterface") 时,我得到了这个异常:

这是产生此行为的示例代码:

test.lua 脚本只有这个:

另外,我确保 LUA_PATH 指向 luanet.dll 所在的位置。

可能是什么问题呢?

0 投票
2 回答
3930 浏览

c# - 如何在 C# 中实现 Lua 容器(虚拟文件系统)模块加载器

听起来有点吓人是不是?

一些背景信息,我想使用 LuaInterface 将包含一些 lua 模块的 tar 存档加载到我的 C# 应用程序中。最简单的方法是将这些文件提取到临时文件夹,修改 lua 模块搜索路径并像往常一样使用 require 读取它们。但我不想将这些脚本放在文件系统的某个位置。

所以我认为应该可以使用#ziplib加载tar-archive,我知道有很多用于tar 之类的lua 实现。但是#zlib 已经是项目的一部分。

在成功将文件作为字符串(流)从存档中加载后,我应该能够通过 LuaInterface 将它们传递到 C# 中的 lua.DoString(...) 中。

但是,如果模块有这样的一行,那么简单地通过 dostring 或 dofile 加载模块是行不通的:“module(..., package.seeall)” 有一个错误报告,比如将参数 1 传递为零,但需要字符串。

另一个问题是一个模块可能依赖于也位于 tar 存档中的其他模块。

一种可能的解决方案应该是定义一个自定义加载器,如此所述。

我的想法是使用#ziplib 在C# 中实现这样的加载器,并将这个加载器映射到我的C# 应用程序的lua 堆栈中。

你们中有人有类似的任务吗?是否有任何现成的解决方案已经解决了此类问题?

tar 文件不是必须的,而是一个很好的包格式。

这个想法是可行的还是完全不可行的?

我编写了一些示例类来从存档中提取 lua 文件。此方法用作加载程序并返回一个 lua 函数。

}

我尝试在 LuaInterface 中注册这样的加载方法

如果我以这种方式尝试,我会在调用 require 时遇到异常:

“实例方法‘加载’需要一个非空目标对象”

我尝试直接调用加载方法,这里我必须使用“:”符号。

如果我这样调用该方法,我会在调试器中遇到一个断点,该断点位于该方法的顶部,因此一切都按预期工作。

但是,如果我尝试使用“:”符号注册该方法,则在注册该方法时会出现异常:

"[string "chunk"]:1: 函数参数应该在 ')' 附近"

0 投票
2 回答
2794 浏览

c# - LuaInterface - 在 .Net 3.5 / .Net 4.0 FileLoadException 下编译

我的一个项目使用 LuaInterface。我已经开始将它从 XNA 迁移到 OpenTX,并在 .Net 4.0 下重写它。

我开始移动我的 Lua 类,发现调试时出现异常(FileLoadException)

当我重建 LuaInterface 时,我将 .Net Framework 的属性从 .Net 2.0 更改为 .Net 4.0(以及它的客户端模式)和 .Net 3.5。

这两个设置都给我一个错误,说明它仍然使用 2.0 构建。

我在 StackOverflow 和 MSDN 上尝试了许多解决方案,声明设置 app.config 甚至出于某些不敬虔的原因更改应用程序池......

无论如何,我尝试的每个解决方案都失败了,说明它仍然使用 2.0.

我使用了“IL DASM”,它声明它是使用 3.5/4.0 构建的。

关于发生了什么的任何想法?整天都在搞这个。我是否只是天真地认为更改单个设置可以解决我的问题?

任何帮助将不胜感激。

0 投票
2 回答
1768 浏览

c# - LuaInterface - 如何限制对 .Net 类的访问?

我正在尝试使用 LuaInterface 2.0.3 在我的 C# 应用程序中嵌入一些 Lua 脚本功能。到目前为止,这工作得很好,但我不知道如何限制对少数指定的 .Net 类的访问。默认情况下,所有 .Net 库都可以通过“luanet”直接访问,Lua 脚本可以自由打开新窗口或访问文件系统。

例如,这个 Lua 脚本将打开一个新窗口:

编写脚本的自由度非常好,但这可能会干扰托管应用程序,并且有一些我不太喜欢的与安全相关的影响。有什么办法可以禁用它吗?

0 投票
1 回答
2561 浏览

c# - 等待 Lua 中的异步事件

我在 Lua 中有一个库,可以为协议创建和解析数据包。当我发送一个数据包时,我期待来自目的地的回复,然后将其解析成一个表。我正在尝试围绕这个库编写一个包装器,以便我可以进行如下的函数调用:result = SendUnicast(dest,packetData)并将解析的响应表返回给结果。

我的问题有两个:1)传入的消息是异步传入的,并且在与执行脚本不同的线程上,2)我收到的下一个数据包不一定是我的请求的响应,我必须解析传入的数据包并匹配一个序列号。

程序流程目前看起来像:

[C# UI 线程]

  • 按钮点击
  • 运行 Lua 脚本
    • 调用发送单播
    • 等待响应

[C#数据线程]

  • 传入消息
    • 将消息传递给 Lua 解析器函数
    • 如果序列匹配等待命令,存储解析表,恢复阻塞

[C# UI 线程]

  • Lua scipt 返回解析后的表

我似乎找不到阻止当前正在执行的脚本(在 UIThread 中)的好方法。创建一个在解析消息时要调用的协程,然后while coroutine.status(co) ~= "dead"似乎会杀死我的 lua 解释器。

编辑

我将 BMitch 的答案标记为已接受,因为它是处理此问题的正确方法。然而,我会警告你,LuaInterface 不支持协程,我必须自己在 C# 代码中添加对协程的支持。

0 投票
2 回答
2032 浏览

c# - C#外部库(Lua)调用问题

我是 C# (VS2010) .Net (4.0) 编程的新手,我遇到了我自己无法解决的问题,因为已经有几天了。

我在我的 C# 代码中使用了外部脚本语言 (Lua)。

为此,我使用为 .Net 4.0 构建的 LuaInterpreter

第一次尝试:该项目是一个控制台应用程序->当我尝试调用 Lua 类时程序运行良好。

第二次尝试:该项目是 Excel 中使用的类库 COM -> 类库编译良好,我的用户定义函数在 Excel 中工作正常。但是当我试图调用一个 Lua 类时,它崩溃了,说 Lua 程序集丢失了。

重现问题:

1-您需要从 http://www.mdome.org/2011/05/16/luainterface-for-csharp-net-4-custom-build/获取 LuaInterface .Net 4.0

2-在项目中添加 LuaInterface 作为参考

3- 将 Lua51 DLL 复制到构建目录中(我也把我的 Excel 表放在那里)

4-复制类库的代码

崩溃的函数是从 Excel 调用时的测试函数

我会为此提供任何帮助谢谢

0 投票
2 回答
1861 浏览

.net - 将表转换为字节数组

我正在尝试将 Lua 表转换为 C# 字节数组。我能够转换为 Double 数组以按如下方式工作:

但是,如果我将 更改dbl_arrByte数组 ( dbl_arr = Byte[4]),则会收到以下错误:(error object is not a string)

我尝试了很多不同的事情,但没有运气。任何帮助,将不胜感激。

更新:

通过这样做,我能够从错误中获得更多信息:

Nowsuc为 false 并err返回以下消息:

我从这里安装了 luaforwindows 。它的版本是 5.1.4-45。我正在运行 Microsoft Windows XP Professional Version 2002 Service Pack 3

更新:

这是示例代码以及发生错误的位置

0 投票
2 回答
664 浏览

.net - 如何设置 Wireshark 以运行 Lua 的 CLRPackage

我正在尝试设置Wireshark,以便我可以使用LuaInterface来使用 .NET 框架中的一些类。我可以通过 Lua 命令行运行它,但是当我尝试require "CLRPackage"init.lua启动脚本中运行时,它似乎找不到所需的文件。启动 Wireshark 时出现以下异常:

我尝试设置package.pathandpackage.cpath以匹配在命令行中设置的内容,但这似乎没有帮助。

当我这样做时,我收到以下错误:

这是一个奇怪的错误,因为该文件确实存在。

我已经在C:\Program Files\Lua\5.1.

有没有人能够得到这个工作?任何帮助,将不胜感激。

我正在使用 Wireshark 1.4.4 和 Lua 5.1.4

0 投票
2 回答
698 浏览

c# - LuaInterface 随机异常

我正在使用 LuaInterface 在我正在制作的游戏中编写脚本。

脚本工作得很好,但不知何故我得到了很多随机异常。

我已将问题缩小到从 C# 代码调用 lua 函数的位置,这些函数是从另一个线程调用的,用于处理与游戏服务器的网络连接。

我认为正在发生的事情是正在运行 lua 代码,并且从另一个线程从 C# 调用 lua 函数,这会导致随机错误。

我如何从 C# 调用函数:

function 是 LuaFunction 类型, message 是自定义对象。

我得到的错误:

  • LuaInterface.dll 中发生了“LuaInterface.LuaScriptException”类型的第一次机会异常
  • 运行lua时出错:函数
  • LuaInterface.dll 中发生了“LuaInterface.LuaScriptException”类型的第一次机会异常
  • 无法打开脚本:mainmenu/console

它是否与从创建 LuaVM 的线程以外的线程运行 lua 函数有关?