5

我们正在 .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()

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

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

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

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

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

运行后,解释器抛出: lua: error loading module 'LuaTest' from file '.\LuaTest.dll': The specified procedure could not be found。

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

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

编辑:Lua 不是 LUA。对讲葡萄牙语的人没有冒犯。我使用的 Lunanet 必须与 .NET 4.0 兼容,否则第一段代码将无法运行。

4

2 回答 2

1

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

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

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

于 2014-06-08T03:06:49.380 回答
0

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

给您的附加说明:我需要使用 .NET 3.5 框架。使用 .NET 4.0 LuaInterface 对我不起作用。

于 2015-05-08T13:53:09.573 回答