由于我的游戏,我真的希望单声道可用,似乎不能在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的兼容性。
答案 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。