2012-02-24 9 views
5

Bardzo podstawowe pytanie myślę:luabind: Nie można wywołać podstawowe funkcje, takie jak lua druku, toString

C++ kod, nazywając Lua wygląda następująco:

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); 

teraz test.lua ma poniżej treść:

function main() 
print "1" 
end 

Po wykonaniu otrzymuję błąd:

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

Na czym polega problem? Ma coś wspólnego ze środowiskiem? Myślałem, że funkcje takie jak druk są zdefiniowane w środowisku globalnym. Dlaczego go nie znaleziono?

Dziękuję bardzo.

+0

ok i zdobione: luaopen_base (m_L); musi zostać wywołany po lua_open() –

+0

musisz wywołać luaopen_string (m_L), luaopen_math (m_L), itp., aby otworzyć odpowiednie wbudowane biblioteki lua, jeśli planujesz także ich używać. –

+0

@ chris.schuette: Powinieneś odpowiedzieć na własne pytanie i zaakceptować odpowiedź (tym samym oznaczając pytanie jako gotowe) lub usunąć pytanie. –

Odpowiedz

6

Jak się zorientowałeś, musisz zadzwonić pod numer luaopen_base, aby uzyskać print i inne funkcje podstawowe. Potem trzeba zadzwonić luaopen_string, luaopen_math, aby uzyskać podstawowe moduły i funkcje Zamiast pisać to wszystko ręcznie, może załadować wszystkie funkcję bazową Lua naraz z luaL_openlibs.

lua_State* m_L = luaL_newstate(); 
luaL_openlibs(m_L); 
Powiązane problemy