因为我的游戏--我真的很想使用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的兼容性。
发布于 2009-10-18 19:45:25
你提到了我的问题。我采取了另一种方法来解决这个问题,并开始开发一个新的Lua .NET接口。我叫它Lua4Net。
你可以找到关于Google主机的消息来源。和在这里,单元测试。
当前实现的功能:使用异常处理执行代码并提供返回值;使用参数处理注册全局函数。
以下特性:获取/设置全局变量;调试支持,.
您可以找到使用过的这里的本机windows DLL (它是来自这里的重命名的VC++ 9.0DLL)。
今天我运行了我的第一个Linux/Mono测试,我的所有单元测试都成功了!
发布于 2009-10-18 14:19:34
默认情况下,AFAIK为Linux下的本机库使用.so扩展。
尝试将lua51.dll重命名为lua51.so或在DllImport属性中更改dllname。或者用dllmap。
https://stackoverflow.com/questions/1584992
复制相似问题