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

pro*_*ldo 5 .net c# 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()
Run Code Online (Sandbox Code Playgroud)

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

require 'luanet'
luanet.load_assembly("LuaTest")
PlanetarySystem = luanet.import_type("LuaTest.PlanetarySystem")
solarSystem = PlanetarySystem()
Run Code Online (Sandbox Code Playgroud)

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

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

package.path = package.path .. ";" .. "/?.dll"
require 'luanet'
require 'LuaTest'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

小智 1

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

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

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