2009-10-18 8 views
3

Depuis mon jeu, que je voudrais vraiment être mono-utilisable, ne semble pas fonctionner sous Linux parce LuaInterface est d'être une secousse (voir le the relevant SO thread pour plus sur cela), j'ai décidé de faire ce qui il a suggéré . J'ai écrit ma propre classe Lua511.LuaDLL pour refléter celui utilisé par LuaInterface, en remplaçant chaque fonction publique avec son DllImport respective de lua51:DllNotFoundException en essayant de "réparer" LuaInterface, mais pourquoi?

//For example, like this: 
[DllImport("lua51")] 
public static extern IntPtr luaL_newstate(); 

Avec l'édition LuaInterface.dll (qui accueille désormais sa propre Lua511.LuaDLL) et un lua51.dll Win32 pur, natif dans le dossier de démarrage de mon jeu, je reçois un DllNotFoundException en quelque sorte quand essaie de LuaInterface initialize:

public Lua() 
{ 
    luaState = LuaDLL.luaL_newstate(); //right there, right then. 
    ... 

Ofcourse, avec la DLL là, il ne devrait pas le faire, à droite ? Bizarrement, remettre la version .Net de lua51.dll à la place donne une EntryPointNotFoundException à la place. L'esprit boggle.

Alors, qu'est-ce qui se passe avec ça?

Code source pertinent: Lua511.cs, l'a supprimé dans le projet LuaInterface, puis supprimé la référence afin qu'elle soit remplacée.

Editer: Vis ça, je vais chercher des alternatives. Ou roule le mien. Ou arrêtez de vous soucier de la compatibilité avec Linux. mono

Répondre

4

Vous avez parlé my question. J'ai pris l'autre façon de résoudre le problème et j'ai commencé à développer une nouvelle interface Lua .NET. Je l'ai appelé Lua4Net.

Vous pouvez trouver le sources on Google hosting. Et here the unit tests.

fonctionnalités actuellement mises en œuvre: exécuter du code avec la gestion des exceptions et fournissent les valeurs de retour; enregistrer des fonctions globales avec gestion des paramètres.

Fonctionnalités suivantes: Obtenir/définir des variables globales; support de débogage, ...

Vous pouvez trouver utilisé native windows DLL here (il est 9.0 DLL du VC renommé de here). ET: Aujourd'hui, j'ai couru mes premiers tests Linux/Mono, et tous mes tests unitaires ont fonctionné !!!

+0

Très impressionnant. Je vais devoir vérifier ça plus tard aujourd'hui ... – Kawa

1

utilise de AFAIK .so extension pour les bibliothèques natives sous Linux par défaut.

Essayez de renommer votre lua51.dll à lua51.so ou changer dllname dans l'attribut DllImport. Ou utilisez dllmap.

+0

Eeeeeh no. Je cours sous Windows, en fait. Et le DllImport ne spécifie pas d'extension. – Kawa

+0

Oh, désolé, j'ai mal compris. J'ai examiné lua51.dll de LuaInterface avec Dependency Walker et j'ai trouvé qu'il exportait des fonctions * no *. Ensuite, j'ai reconstruit lua51 à partir de sources. Il a commencé à charger, puis a échoué avec EntryPointNotFoundException pour la fonction (à la fois sur .NET et Mono). C'est normal car il n'y a pas de telle fonction - c'est une macro dans lua.h définie au dessus de lua_createtable. Il en va de même pour beaucoup d'autres 'fonctions' en lua.h. Donc, je pense que vous devriez remplacer les imports dll par des appels à des fonctions réelles et vous avez eu une chance de faire fonctionner LuaInterface. –

+0

J'ai modifié votre fichier lua511.cs pour exécuter des scripts simples. voir ici http://pastie.org/659584. J'espère que cela aidera –

Questions connexes