2012-02-24 5 views
5

Una domanda molto semplice immagino:luabind: Non è possibile richiamare le funzioni di base come lua stampa, tostring

Il codice C++, chiamando Lua si presenta così:

lua_State* m_L; 
m_L = lua_open(); 
luabind::open(m_L); 
luaL_dofile(m_L, "test.lua"); 
try { 
    luabind::call_function<void>(m_L, "main"); 
} catch (luabind::error& e) { 
    std::string error = lua_tostring(e.state(), -1); 
    std::cout << error << std::endl; 
} 
lua_close(m_L); 

ora test.lua ha la seguente contenuto:

function main() 
print "1" 
end 

all'esecuzione ricevo l'errore:

test.lua:2: attempt to call global 'print' (a nil value) 

Qual è il problema? Ha qualcosa a che fare con gli ambienti? Ho pensato che funzioni come la stampa siano definite nell'ambiente globale. Perché non si trova allora?

Grazie mille.

+0

ok ho capito: luaopen_base (m_L); deve essere chiamato dopo lua_open() –

+0

dovrai chiamare luaopen_string (m_L), luaopen_math (m_L), ecc per aprire le librerie lua incorporate appropriate, se prevedi di usarle anche tu. –

+0

@ chris.schuette: è necessario rispondere alla propria domanda e accettare quella risposta (contrassegnando così la domanda come completata) o eliminare la domanda. –

risposta

6

Come hai capito, devi chiamare luaopen_base per ottenere print e altre funzioni di base. Allora avete bisogno di chiamare luaopen_string, luaopen_math, per ottenere i moduli e funzioni di base in Invece di scrivere tutto manualmente, può caricare tutte le funzioni di base Lua in una volta con luaL_openlibs:.

lua_State* m_L = luaL_newstate(); 
luaL_openlibs(m_L); 
Problemi correlati