如何创建可供Lua(适用于Windows)加载的自定义.NET dll?

我们正在.NET框架中进行一个项目,并希望以后可以使它的大多数功能对Lua脚本可用。我认为我可以编译一个dll,并通过LuaInterface帮助将其加载到Lua脚本中。但不知何故它没有起作用。

以下是有效的内容:

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:从文件'.\LuaTest.dll'加载模块'LuaTest'时出错:找不到指定的过程。

我对.NET框架和LuaInterface是初学者。也许我做错了什么。请在这方面提供帮助。非常感谢!

编辑:也许我应该在我的dll中为Lua有一个“入口点”,以指示该dll可由Lua加载??

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

点赞
用户2356042
用户2356042

我认为您将程序集名称与导入的类型的完全限定名称的必要部分混淆了。错误表明,PlanetarySystem类是“nil值”,这意味着它很可能找不到该完全限定名称的类。我建议您确定您的类所在的命名空间。

其次,如果我的第一条建议不起作用,您可能需要将您的类设为ComVisible,以便Lua引擎可以看到您的类。

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

2014-06-08 03:06:49
用户4767671
用户4767671

如果你的电脑装好了 Lua 和 C#2010,则将 C# 代码复制到 DLL 项目中并构建它。然后确保你的 DLL 位于 Lua 环境的注册目录中并执行在同一帖子中显示的 Lua 脚本便可。对你的额外提示:我需要使用 .NET 3.5 框架。使用 .NET 4.0,LuaInterface 对我而言不起作用。

Try this link. 我发布了一个有效的解决方案!

2015-05-08 13:53:09