由于我的游戏,我非常希望它能够在Mono下使用,但看起来由于LuaInterface很顽固(参见相关的SO讨论),它似乎无法在Linux下运行。因此,我决定按照那里提出的建议去做。我编写了自己的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就在那里,它不应该这样做,对吧?奇怪的是,重新放回被搞砸的lua51.dll .Net版本会导致EntryPointNotFoundException。这真是让人费解。
那么这是怎么回事呢?
相关源代码:Lua511.cs,将其放入LuaInterface项目中,然后删除引用,以便替换它。
编辑:算了,我要寻找替代方案。或者自己动手。或者干脆不再关心Linux兼容性。