尝试“修复”LuaInterface时出现DllNotFoundException,但为什么呢?

时间:2009-10-18 14:09:49

标签: c# mono lua luainterface

由于我的游戏,我真的希望单声道可用,似乎不能在Linux下运行,因为LuaInterface是一个混蛋(请参阅the relevant SO thread了解更多内容),我已经决定做那里的建议。我编写了自己的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的兼容性。

2 个答案:

答案 0 :(得分:4)

您引用了my question。我采取了另一种方式解决问题,并开始开发一个新的Lua .NET接口。我叫它Lua4Net。

您可以找到sources on Google hosting。并here the unit tests

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

将遵循的功能:获取/设置全局变量;调试支持,......

您可以找到使用过的native windows DLL here(它是here中重命名的VC ++ 9.0 DLL)。

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

答案 1 :(得分:1)

默认情况下,AFAIK mono在Linux下使用.so extension本机库。

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