2012-01-20 12 views

risposta

51

Questo è tutto molto semplice.

Innanzitutto, si carica lo script Lua senza eseguendolo. Non importa se hai collegato lo stato Lua con le tue funzioni esportate; tutto quello che stai facendo è compilare il file di script.

È possibile utilizzare luaL_loadfile, che utilizza le funzioni della libreria standard C per leggere un file dal disco e caricarlo nello lua_State. In alternativa, è possibile caricare il file in una stringa e utilizzare luaL_loadstring per caricarlo nello lua_State.

Entrambe queste funzioni emetteranno i valori restituiti e gli errori del compilatore come da the documentation for lua_load.

Se la compilazione ha avuto esito positivo, lo lua_State ora ha il blocco Lua compilato come una funzione Lua nella parte superiore dello stack. Per ottenere il binario compilato, è necessario utilizzare la funzione lua_dump. È piuttosto complicato in quanto utilizza un'interfaccia di callback per passare i tuoi dati. Vedi the documentation for details.

Dopo questo processo, si ha il codice byte Lua compilato. Inseriscilo in un file di tua scelta. Ricorda: scrivi come binario, non con la traduzione del testo.

Quando arriva il momento di caricare il codice byte, tutto quello che devi fare è ... esattamente quello che hai fatto prima dello. Be 'quasi. Lua ha euristiche per rilevare che una "stringa" è data da una stringa di origine Lua o da un codice byte. Quindi sì, è possibile caricare il codice byte con luaL_loadfile proprio come prima.

La differenza è che non è possibile utilizzare luaL_loadstring con codice byte. Quella funzione si aspetta una stringa terminata con NULL, che è cattiva. Il codice byte può contenere caratteri NULL incorporati, che potrebbero rovinare tutto. Quindi se vuoi fare da te il file IO (perché stai usando un filesystem speciale o qualcosa del genere), devi usare direttamente lua_load. Che utilizza anche un'interfaccia di callback come lua_dump. Quindi read up on how to use it.

+1

Vorrei che ci fossero più tali risposte sonore! – vines

+0

Ottima risposta, è esattamente quello che pensavo sarebbe, ma non sapevo cosa usare. Ci proverò. Ora dimmi, quanto è difficile mettere qualcosa di simile (chiaro e obiettivo) in una FAQ o anche nella documentazione? Grazie! – WoLfulus

+5

@WoLfulus: se hai cercato su google "Lua load bytecode", il [primo link] (http://csl.sublevel3.org/lua/) ti avrebbe detto tutto ciò che avresti dovuto sapere. Quindi non vedo la necessità di una FAQ su questo. E l'applicazione 'luac' già può precompilare gli script Lua in bytecode, quindi non è nemmeno necessario un programma per farlo. Quindi, davvero, non c'è bisogno di una FAQ; solo l'uso corretto di Google. –

Problemi correlati