【问题标题】:Instance of C# class with NLua带有 NLua 的 C# 类的实例
【发布时间】:2015-04-27 23:59:46
【问题描述】:

我正在尝试使用 NLua 在 lua 文件中创建 C# 类的实例

这是我的代码。

class Program
{
    public static void Main (string[] args)
    {

        Lua lua = new Lua();
        lua.LoadCLRPackage();

        lua.DoString(@"
                        import ('LuaTest.exe', 'LuaTest')
                        test = Test()
                    ");
    }
}

public class Test
{
    public Test()
    {
        Console.WriteLine("IT WORKED");
    }
}

但这似乎不起作用,我环顾四周并尝试了许多不同的方法。我尝试过的大多数方法的错误是:

“NLua.Exceptions.LuaScriptException”类型的未处理异常 发生在 NLua.dll 附加信息:[string "chunk"]:3: 尝试调用全局“测试”(零值)

这有点奇怪,因为这是直接来自他们的示例代码? https://github.com/NLua/NLua

感谢大家的帮助。

有点咆哮:

如果我做错了什么,请告诉我。 附带说明一下,我使用的是纯 C# 构建,不确定这是否会有所不同,我没有看到任何警告?但整个事情似乎广泛无证......

如果有人对更好的纯 C# Lua 库有任何建议,我会全力以赴。

【问题讨论】:

  • 你把当前的可执行文件导入到Lua系统了吗?这是在示例代码中: state.DoString (@" import ('MyAssembly.exe', 'MyNamespace') import ('System.Web') ");
  • @RonBeyer 是的,我认为 LuaTest.exe 是我的程序集,LuaTest 是命名空间。
  • 对不起,我错过了你发布的代码中的那一行,这是我唯一的想法。
  • @RonBeyer 不用担心,我整天都在面对这个问题,任何事情都有帮助:)
  • 暂时我将不得不做一些工作...注册一些返回我需要的对象的新实例的 C# 函数。这很恶心,但我无法弄清楚这一点。

标签: c# lua nlua


【解决方案1】:

对此我很抱歉。自述文件有误。

只需删除“.exe”即可正常工作

class Program
{
    public static void Main (string[] args)
    {

        Lua lua = new Lua();
        lua.LoadCLRPackage();

        lua.DoString(@"
                        import ('LuaTest', 'LuaTest')
                        test = Test()
                    ");
    }
}

public class Test
{
    public Test()
    {
        Console.WriteLine("IT WORKED");
    }
}

https://github.com/NLua/NLua

我已经修复了来自 github.com/nlua/nlua 的 README

【讨论】:

  • 我现在正在工作,所以我一回家就试一试,我也无法让它与图书馆合作,例如:“system.net”那个?
  • IIRC 程序集加载区分大小写,请改用“System.Net”
  • 我很高兴解决方案是简单地删除 .exe。 :) 谢谢你。对于其他库,这有效: import ('System', 'System.Net.Sockets')
  • 系统库一切都很好,但我导入的自定义库没有运气。但这仍然是向前迈出的一大步:)
  • 请您也修复nlua.org的主页吗?在那里展示的示例中存在相同的“错误”,它诱使我犯了同样的错误。导入('MyAssembly.exe','MyNamespace')。谢谢,继续努力!
【解决方案2】:

您的class and method 缺少test annotations

class Program
{
    public static void Main (string[] args)
    {

        Lua lua = new Lua();
        lua.LoadCLRPackage();

        lua.DoString(@"
                        import ('LuaTest.exe', 'LuaTest')
                        test = Test()
                    ");
    }
}
[TestFixture]
public class Test
{
    [Test]
    public Test()
    {
        Console.WriteLine("IT WORKED");
    }
}

【讨论】:

  • 嗯不确定是这样,我只是将它命名为“测试”作为示例,它不适用于我命名类、程序集或命名空间的任何东西......但我会试试看明天:)
猜你喜欢
  • 2016-09-21
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2012-03-01
  • 1970-01-01
  • 2012-11-28
相关资源
最近更新 更多