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是一个单身人士,我马上使用代码分配实例:
EVENTMANAGER = luanet.import_type("Program.EventManager")
Event = EVENTMANAGER.Instance
从那时起,我使用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)
所以我更接近于解决这个问题,但我仍然不知道该如何解决这个问题。
我通过关于#mono的讨论挖掘出了我碰到的这颗宝石。
https://github.com/cdhowie/Eluant
免责声明:我是作者。
你可以看看MoonSharp(http://www.moonsharp.org)。 它是一个完全用C#for .NET 3.5和更高版本编写的Lua解释器(适用于Mono和Unity),它包含一个远程调试器,可以通过Web浏览器调试嵌入在程序中的脚本(所以它也适用于全屏游戏和Windows服务)。
即使编译为3.5,仍然可以在.NET 4中使用LuaInterface。
只需在app.config中添加useLegacyV2RuntimeActivationPolicy="true"
:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
链接地址: http://www.djcxy.com/p/16005.html
上一篇: C# and Lua