2009-09-25 5 views
1

Je suis en train d'étudier l'ajout de scripts à mon application C#. J'ai débattu entre Lua et C# (via CSharpCodeProvider).Exposition d'objets C# à l'écriture de scripts Lua

Indépendamment de la langue que j'utilise, j'ai besoin du script pour pouvoir accéder/manipuler des objets/tableaux dans mon application principale. Avec C# je devrais pouvoir exposer mes objets et fonctions d'interface sans trop de problèmes. Cependant, avec Lua, il semble que je ne pourrai accéder aux objets de l'application qu'à travers des fonctions exposées. Je ne vois pas comment je pourrais avoir une interface non-chunky pour, par exemple, des tableaux. J'aurais besoin des fonctions Array1Set (index, value)/Array1Get (index) ou ArraySet (array_no, index, value)/.... Existe-t-il une manière élégante de mettre en œuvre ceci? Je ne veux pas copier les tableaux sur la machine Lua, la manipuler, puis la réinsérer dans mon application.

Merci

+1

Vous trouverez que la communauté de langue Lua est très amicale et utile aux nouveaux utilisateurs, mais est également sensible à l'orthographe. Lua est un nom propre, portugais pour Moon. Il est capitalisé, mais jamais en majuscule parce que ce n'est pas un acronyme d'aucune sorte. – RBerteig

Répondre

3

Vous devriez jeter un oeil sur le projet LuaInterface, qui soutient l'intégration complète entre Lua et .NET. Demandez à google pour plus d'informations sur LuaInterface pour trouver beaucoup de pages utiles de discussion, d'échantillons et d'idées.

La méthode générale de partage d'objets entre Lua et toute application dans toutes les langues est de définir les __index() et __newindex() métaméthodes (et peut-être d'autres) d'un userdata contenant soit l'instance d'objet lui-même (laisser GC Lua gérer la durée de vie de l'objet) ou un pointeur vers l'instance (ce qui nécessite une coopération minutieuse avec le GC). Les métaméthodes permettent au code de Lua de manipuler les champs de l'objet comme s'ils étaient stockés dans une table Lua.

+0

Un grand merci, c'est ce que je cherchais! Mon googling n'a pas trouvé LuaInterface. – Aaron