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



我们正在.NET框架中进行一个项目,希望稍后将其大部分功能用于Lua脚本。我想我可以在LuaInterface的帮助下编译一个dll并将其加载到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()

正如您所看到的,我在这里加载标准的程序集和类型,这并没有造成太大的问题。但是,如果我有自己的dll"LuaTest"在.NET 4.0下编译,并尝试在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:error加载模块"LuaTest"。\"LuaTest.dll":找不到指定的过程。

我是.NET框架和LuaInterface的新手。也许我做错了什么。请帮我一下。非常感谢!

编辑:也许我应该在我的dll中有一个Lua的"入口点",以表明这个dll是可加载的???

编辑: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环境的注册目录中,并执行同一篇文章中显示的lua脚本。

另外需要注意的是:我需要使用.NET3.5框架。使用.NET 4.0时,LuaInterface对我不起作用。

最新更新