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

我们正在.NET框架中进行一个项目,并希望以后为Lua脚本提供大部分function。 我以为我可以编译一个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() 

如您所见,这里我正在加载标准assembly和类型,这不会造成太大问题。 但是,如果我在.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兼容,否则第一段代码将无效。

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

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

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

试试这个链接。 我发布了一个解决方案,工作正常! 如果您的电脑准备充分(例如安装了lua和C#2010),那么将C#代码复制到dll项目并构建它。 然后确保您的dll位于lua环境的已注册目录中,并执行同一post中显示的lua脚本。

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