2012-11-14 6 views
5

Stiamo facendo un progetto in .NET framework e vogliamo rendere disponibili la maggior parte delle sue funzionalità in seguito per gli script Lua. Ho pensato di compilare una DLL e caricarla su Lua con l'aiuto di LuaInterface. Ma in qualche modo non ha funzionato.Come creare una dll .NET personalizzata caricabile per Lua (per Windows)?

Che cosa ha fatto il lavoro è la seguente:

require 'luanet' 
luanet.load_assembly("System.Windows.Forms") 
Form = luanet.import_type("System.Windows.Forms.Form") 
Button = luanet.import_type("System.Windows.Forms.Button") 
form1 = Form() 
button1 = Button() 

Come puoi vedere, qui mi sto caricando assemblaggio standard e tipi, che non ha causato molto problema. Tuttavia, se ho il mio dll 'LuaTest' compilato sotto .NET 4.0 e provo a caricarlo in LUA. Non ha funzionato. Ho scritto qualcosa di simile,

require 'luanet' 
luanet.load_assembly("LuaTest") 
PlanetarySystem = luanet.import_type("LuaTest.PlanetarySystem") 
solarSystem = PlanetarySystem() 

dove 'PlanetarySystem' è una classe in LuaTest. Se eseguo questa parte di codice, l'interprete direbbe: tenta di chiamare "PlanetarySystem" globale (un valore nullo).

Ho provato anche un altro modo per caricare la DLL:

package.path = package.path .. ";" .. "/?.dll" 
require 'luanet' 
require 'LuaTest' 

Dopo corsa, l'interprete getta: lua: errore di caricamento del modulo 'LuaTest' dal file '\ LuaTest.dll.': La procedura specificata potrebbe non essere trovato

Sono piuttosto un principiante di .NET framework e LuaInterface. Forse ho fatto qualcosa di completamente sbagliato. Per favore aiutami su questo. Grazie molto!

Modifica: Forse dovrei avere un "Punto di ingresso" per Lua nella mia DLL per indicare che questa DLL è caricabile LUA ???

Modifica: Lua non LUA. Senza offesa alle persone che parlano portoghese. Il Lunanet che sto usando deve essere compatibile con .NET 4.0, altrimenti il ​​primo pezzo di codice non funzionerebbe.

+2

Lua è un nome proprio, non un acronimo. È Lua, non LUA. –

+0

è la tua build Luanet compatibile con .Net 4.0? –

risposta

1

Credo che si confonda il nome dell'assembly con l'essere una parte necessaria del nome completo del tipo che si sta tentando di importare. L'errore indica che la classe PlanetarySystem è un "valore nullo", il che significa che probabilmente non è stato possibile trovare una classe con quel nome completo. Sarei sicuro sullo spazio dei nomi in cui si trovava la tua classe.

In secondo luogo, se la mia prima raccomandazione non funziona, potresti dover rendere le tue classi ComVisible in modo che il motore Lua possa vedere le tue classi.

http://msdn.microsoft.com/en-us/library/ms182157.aspx

0

Try this link. I posted a solution which works fine! Se il vostro pc è ben preparata (installato lua & C# 2010 per esempio) e poi copiare il codice C# per un progetto DLL e costruirlo. Quindi assicurati che la tua DLL si trovi in ​​una directory registrata per il tuo ambiente lua ed esegui lo script lua che è mostrato nello stesso post.

Una nota aggiuntiva per voi: avevo bisogno di utilizzare .NET 3.5 framework. Con .NET 4.0 LuaInterface non ha funzionato per me.

Problemi correlati