如何为Lua(forWindows)创建可加载的自定义.NET DLL?

时间:2012-11-14 15:14:25

标签: c# .net lua luainterface

我们正在.NET框架中开展一个项目,并希望稍后为Lua脚本提供大部分功能。我以为我可以编译一个DLL并在LuaInterface的帮助下将其加载到Lua脚本。但不知怎的,它没有用。

DID的工作原理如下:

require 'luanet' 
luanet.load_assembly("System.Windows.Forms")
Form = luanet.import_type("System.Windows.Forms.Form")
Button = luanet.import_type("System.Windows.Forms.Button")
form1 = Form()
button1 = Button()

正如您所看到的,这里我正在加载标准的程序集和类型,这并没有造成太大问题。 但是,如果我在.NET 4.0下编译自己的dll'LuaTest'并尝试在LUA中加载它。那没起效。我写了类似的东西,

require 'luanet'
luanet.load_assembly("LuaTest")
PlanetarySystem = luanet.import_type("LuaTest.PlanetarySystem")
solarSystem = PlanetarySystem()

其中'PlanetarySystem'是LuaTest中的一个类。如果我运行这段代码,解释器会说:尝试调用全局'PlanetarySystem'(零值)。

我还尝试了另一种加载dll的方法:

package.path = package.path .. ";" .. "/?.dll"
require 'luanet'
require 'LuaTest'

运行后,解释器抛出:lua:从文件'。\ LuaTest.dll'加载模块'LuaTest'时出错:找不到指定的过程。

我是.NET框架和LuaInterface的新手。也许我做了一件完全错误的事情。请帮帮我。非常感谢!

编辑:也许我应该在我的dll中有一个Lua的“入口点”来表示这个dll是LUA可加载的???

编辑:Lua不是LUA。对讲葡语的人没有冒犯。我正在使用的Lunanet必须与.NET 4.0兼容,否则第一段代码将不起作用。

2 个答案:

答案 0 :(得分:1)

我相信您将程序集名称与您尝试导入的类型的完全限定名称的必需部分混淆。该错误表明PlanetarySystem类是“零值”,这意味着它可能无法通过该完全限定名称找到类。我肯定会确定你的班级所在的命名空间。

其次,如果我的第一个推荐不起作用,您可能需要使您的类可以隐藏,以便Lua引擎可以看到您的类。

http://msdn.microsoft.com/en-us/library/ms182157.aspx

答案 1 :(得分:0)

Try this link. I posted a solution which works fine! 如果您的电脑准备充分(例如安装了lua& C#2010),那么将C#代码复制到dll项目并构建它。然后确保您的dll位于lua环境的已注册目录中,并执行同一帖子中显示的lua脚本。

另外需要注意的一点:我需要使用.NET 3.5框架。使用.NET 4.0,LuaInterface对我不起作用。