【问题标题】:How to create a custom .NET dll loadable for Lua(forWindows)?如何为 Lua(Windows)创建可加载的自定义 .NET dll?
【发布时间】:2012-11-03 02:39:49
【问题描述】:

我们正在 .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,否则第一段代码不起作用。

【问题讨论】:

  • Lua 是一个专有名称,而不是首字母缩略词。是 Lua,不是 LUA。
  • 您的 Luanet 版本是否与 .Net 4.0 兼容?

标签: c# .net lua luainterface


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    Try this link. I posted a solution which works fine! 如果您的电脑准备充分(例如安装了 lua 和 C#2010),则将 C# 代码复制到 dll 项目并构建它。然后确保您的 dll 位于您的 lua 环境的注册目录中,并执行同一篇文章中显示的 lua 脚本。

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

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2013-07-27
      • 1970-01-01
      • 2020-03-19
      • 2016-12-21
      相关资源
      最近更新 更多