C#和Lua - 当前选项?

cma*_*k89 7 .net c# dll lua luainterface

我创建了一个使用LuaInterface的Mono实现的应用程序,它在Linux上运行良好,没有任何障碍.我无法让LuaInterface完全使用我的应用程序的Windows版本.我花了两天时间试图让它工作,我觉得我错过了一些非常基本的东西.

"最新的"LuaInterface是针对早期版本的.NET编译的,不适用于4.0.我发现一个链接到.dll编译的4.0,但链接已经死了.我试图抓住LuaInterface源并自己编译它,但是Visual Studio 2010无法打开解决方案,因为不支持项目类型(或者有一些错误).

我试过Windows版的MonoLuaInterface; 虽然作者说它适用于Windows,但它显然没有.我一直遇到的错误是,无论我做什么,我都无法让程序检测到luanet.dll.我已经尝试将它放在与可执行文件相同的目录中,我已经尝试过设置LUA_PATHLUA_CPATH在启动时,无论发生什么事情,它都会在第一次提到luanet.dll时抛出.我甚至无法建立样本项目; 他们找不到luanet.dll,只是死在水中.

我也尝试了NLua,这只是一场噩梦.

所以我的问题是:有没有人知道Lua在.NET上的任何其他(工作)实现?如果必须,我会重写大部分胶水代码,我只需要让它工作.或者,任何人都可以指向我的luanet.dll问题的解决方案,甚至是LuaInterface源问题的答案?

我知道这是一个非常广泛的问题,但我完全迷失了,完全不知道从哪里开始尝试解决这个问题.提前感谢有任何想法的人.


好的,我已经取得了一些进展.我再次尝试了NLua,并记得它的问题是什么.经过一些实验,这是我发现的.

我使用的Lua脚本通过一个名为EventManager的导入类型与程序的其余部分进行交互,该类型在相关脚本的开头加载.EventManager是一个单例,我立即使用代码分配实例:

EVENTMANAGER = luanet.import_type("Program.EventManager")
Event = EVENTMANAGER.Instance
Run Code Online (Sandbox Code Playgroud)

从代码中的那一点开始,我使用Event:whateverfunction()调用公开的方法.如果我使用NLua的DoString()方法调用代码,这实际上工作正常.当我尝试在Lua端的协程中调用这些方法时会出现问题,这就是所有内容实际写入的方式.当我这样做时,NLua抛出NullReferenceException.堆栈跟踪如下:

   System.NullReferenceException at NLua.MetaFunctions.GetMethod(LuaState luaState)
   at KeraLua.NativeMethods.LuaNetPCall(IntPtr luaState, Int32 nArgs, Int32 nResults, Int32 errfunc)
   at KeraLua.Lua.LuaNetPCall(IntPtr luaState, Int32 nArgs, Int32 nResults, Int32 errfunc)
   at NLua.LuaLib.LuaPCall(LuaState luaState, Int32 nArgs, Int32 nResults, Int32 errfunc)
   at NLua.Lua.DoString(String chunk, String chunkName)
Run Code Online (Sandbox Code Playgroud)

所以我更接近于解决这个问题,但我仍然不知道在哪里解决这个问题.

Mar*_*anu 2

我仔细研究了 #mono 上的讨论,发现了这个宝石。

https://github.com/cdhowie/Eluant