3

由于我的游戏,我真的很想成为 Mono 可用的,但似乎无法在 Linux 下运行,因为 LuaInterface 是个混蛋(有关更多信息,请参阅相关的 SO 线程),我决定按照建议做那里。我编写了自己的 Lua511.LuaDLL 类来反映 LuaInterface 使用的类,用来自 lua51 的相应 DllImport 替换每个公共函数:

//For example, like this:
[DllImport("lua51")]
public static extern IntPtr luaL_newstate();

使用编辑过的 LuaInterface.dll(现在托管自己的 Lua511.LuaDLL)游戏启动文件夹中的纯原生 Win32 lua51.dll,当 LuaInterface 尝试初始化时,我以某种方式得到了 DllNotFoundException:

public Lua()
{
   luaState = LuaDLL.luaL_newstate(); //right there, right then.
   ...

当然,有了 DLL,它不应该那样做,对吧?奇怪的是,放回混乱的 .Net 版本的 lua51.dll 反而会给出一个 EntryPointNotFoundException。头脑一片混乱。

那是怎么回事?

相关源代码:Lua511.cs,将其放在 LuaInterface 项目中,然后删除引用以便将其替换。

编辑:搞砸了,我要寻找替代品。或滚动我自己的。或者干脆停止关心 Linux 兼容性。

4

2 回答 2

4

你引用了我的问题。我采取了另一种方式来解决问题,并开始开发新的 Lua .NET 接口。我称它为 Lua4Net。

您可以在 Google 托管上找到资源。这里是单元测试

目前实现的功能: 执行带有异常处理的代码并提供返回值;使用参数处理注册全局函数。

后续功能:获取/设置全局变量;调试支持,...

您可以在此处找到使用的本机 Windows DLL(它是从此处重命名的 VC++ 9.0 DLL )。

并且:今天我运行了我的第一个Linux/Mono 测试,我所有的单元测试都成功了!!!

于 2009-10-18T19:45:25.723 回答
1

默认情况下, AFAIK mono对 Linux 下的本机库使用.so 扩展名。

尝试将您的 lua51.dll 重命名为 lua51.so 或更改 DllImport 属性中的 dllname。或者使用 dllmap。

于 2009-10-18T14:19:34.637 回答