2009-10-07 76 views
5

當我試圖在Linux上單用LuaInterface(在Ubuntu 9.04使用單聲道2.0)我得到以下異常:如何使用LuaInterface在Mono/Linux的

 
** (App.exe:8599): WARNING **: Method ':.DoDllLanguageSupportValidation()' in assembly 
'/home/ulrich/test/Debug/lua51.dll' contains native code that cannot 
be executed by Mono on this platform. 
The assembly was probably created using C++/CLI. 

根據this web site LuaInterface 可以是與Mono一起使用。 MoMA也是這樣說的。

是否可以重新編譯lua51.dll以使其與Mono兼容?

回答

6

LuaInterface看起來是純粹的C#,但它使用了混合模式本地Lua庫的Windows版本的C++/CLI版本,混合了.NEt代碼和本機32位Windows代碼。除了Windows以外,沒有其他平臺的C++/CLI編譯器,因此無法移植/重新編譯C++/CLI代碼,儘管它應該適用於Win32上的Mono(或者Wine)。

唯一真正可行的方法爲了在Mono上運行,可以使用P/Invokes而不是C++/CLI。然後,您可以使用dllmap,這樣當Mono嘗試解析lua51.dll的P/Invoke調用時,它將被重定向到與Linux等效的liblua.so.5.1。

+0

問題是,lua51.dll不使用DLLImport(),但編譯非託管的Lua代碼直接到這個託管庫。 – ulrichb 2009-10-07 22:16:31

+0

哎呀,應該仔細看過LuaInterface模式。編輯爲使其正確。 – 2009-10-07 23:44:03

+0

這聽起來不太好,因爲http://luainterface.googlecode.com/svn/trunk/lua-5.1.2/lua511/LuaDLL.cpp似乎做了很多「魔術」,...而且, ....爲什麼沒有混合的C++/CLI編譯器? – ulrichb 2009-10-08 10:59:05