SeRzzz
Гость
|
|
« : 19-04-2004 10:32 » |
|
Кто знает как использовать скриптовый движок Lua?(Под Windows) Просто то что написано в статье не работает. Нужно как-то подключить его. Помогите кто знает
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #1 : 19-04-2004 19:45 » |
|
Вот пример использования extern "C" { #include <lua.h> #include <lauxlib.h> #include <lualib.h> } #include <luabind/luabind.hpp>
#pragma comment(lib,"Lua.lib") #pragma comment(lib,"LuaBind.lib") #pragma comment(lib,"LibLuaLib+CRT.lib")
class TestClass { std::string str;
public: TestClass() : str("Hello World !!!") { std::cout << "TestClass Object Constructed without parameter" << std::endl; }
TestClass(std::string param) : str(param) { std::cout << "TestClass Object Constructed with parameter: " << str << std::endl; }
std::string GetString() { return str; }
void Print() { std::cout << str << std::endl; } };
void PrintFunc(TestClass& test) { std::cout << test.GetString() << std::endl; }
void bind_TestClass(lua_State* L) { using namespace luabind;
module(L, "TestLibrary") [ class_<TestClass>("TestClass") .def(constructor<>()) .def(constructor<std::string>()) .def("get_string", &TestClass::GetString) .def("print", &TestClass::Print) , def("Print", &PrintFunc) ]; }
void TestFunc(std::string str) { std::cout << str << std::endl; }
void main() { lua_State* L = lua_open(); lua_baselibopen(L);
luabind::open(L);
bind_TestClass(L);
luabind::function(L, "test", &TestFunc);
lua_dostring(L, "test('Hello World')");
luabind::call_function<void>(L, "test", std::string("print me"));
lua_dostring(L, "obj = TestLibrary.TestClass() \n obj:print()");
lua_dostring(L, "obj = TestLibrary.TestClass('string1') \n print(obj:get_string())");
lua_dostring(L, "obj = TestLibrary.TestClass('string2') \n TestLibrary.Print(obj)");
lua_close(L); }
|
|
« Последнее редактирование: 25-11-2007 17:16 от Алексей1153++ »
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #2 : 19-04-2004 19:49 » |
|
Пример простой, но демострирует достаточно возможностей использования Lua
для работы потребуются: - Lua - LuaBind - Boost
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #3 : 19-04-2004 22:31 » |
|
Что-то меня поперло писать посреди ночи, вот решил еще сделать чуть удобнее class LuaInterpreter { lua_State* L;
public: enum LuaLibraries { BASE = 1, TABLE = 2, IO = 4, STRING = 8, MATH = 16, DEBUG = 32, ALL = BASE | TABLE | IO | STRING | MATH | DEBUG };
LuaInterpreter(LuaLibraries libs = LuaLibraries::ALL) : L(lua_open()) { if( libs & BASE ) lua_baselibopen(L); if( libs & TABLE ) lua_tablibopen(L); if( libs & IO ) lua_iolibopen(L); if( libs & STRING ) lua_strlibopen(L); if( libs & MATH ) lua_mathlibopen(L); if( libs & DEBUG ) lua_dblibopen(L); luabind::open(L); }
~LuaInterpreter() { lua_close(L); }
operator lua_State*() { return L; }
template<class Binder> void bind(Binder& binder) { binder(L); }
template<class Func> void bind_function(const std::string name, Func& func) { luabind::function(L, name.c_str(), &func); }
template<class Ret, class Param> Ret call_function(const std::string name, Param& param) { return luabind::call_function<Ret>(L, name.c_str(), param); }
template<class Param> void call_function(const std::string name, Param& param) { luabind::call_function<void>(L, name.c_str(), param); }
void dostring(const std::string str) { lua_dostring(L, str.c_str()); }
void dofile(const std::string path) { lua_dofile(L, path.c_str()); } };
void main() { LuaInterpreter lua;
lua.bind_function("test", TestFunc);
lua.dostring("test('Hello World')");
lua.call_function("test", std::string("print me"));
lua.bind(bind_TestClass);
lua.dostring("obj = TestLibrary.TestClass() \n obj:print()");
lua.dostring("obj = TestLibrary.TestClass('string1') \n print(obj:get_string())");
lua.dostring("obj = TestLibrary.TestClass('string2') \n TestLibrary.Print(obj)"); }
|
|
« Последнее редактирование: 25-11-2007 17:17 от Алексей1153++ »
|
Записан
|
|
|
|
SeRzzz
Гость
|
|
« Ответ #4 : 20-04-2004 08:07 » |
|
Спасиба. А где взять LuaBind и Boost и как настроить систему? В библиотеке Lua куча всяких .h и .c файлов, куда их кидать или что с ними сделать?
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #5 : 20-04-2004 17:53 » |
|
BoostLuaBindBoost это библиотека шаблонов, что бы её подключить нужно в среде разработки добавить путь к ней в список поиска includ'ов и все путь к Luabind тоже добавь в Luabind помимо заголовков есть еще исходный код библиотеки, его можно включать в проект или собрать статическую библиотеку и подключать её (так сделал я - LuaBind.lib) у самой Lua всего 3 .h файла, обычно все их надо включать в проект а также подключить библиотеки Lua - Lua.lib, LibLuaLib+CRT.lib | LibLuaLib.lib пути к .lib тоже удобно добавить в среду разработки
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #6 : 20-04-2004 18:03 » |
|
Да, чуть не забыл Lua поставляется в исходниках и её сначала надо собрать там есть makefile, но если хочешь делать это в VC бери тут файлы проекта
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #7 : 23-04-2004 07:20 » |
|
SeRzzz, куда ж ты пропал :?: Интересно ведь как дела идут
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #8 : 23-04-2004 07:55 » |
|
Странно - он зарегистрировался и пропал
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
SeRzzz
Гость
|
|
« Ответ #9 : 26-04-2004 10:02 » |
|
Я скачивал всё необходимое, разбирался и всё такое. Дела продвигаются. Но Serega твои листинги у меня чё-то не работают пока. Дело в том что я пишу курсовую. Мне нужно встроить Lua в игру, которую пишет группа ребят.
|
|
|
Записан
|
|
|
|
SeRzzz
Гость
|
|
« Ответ #10 : 26-04-2004 10:55 » |
|
Да, и ещё, где можно найти рускоязычную документацию по Boost и Luabind?
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #11 : 26-04-2004 12:13 » |
|
К сожалению (а может и к счастью) английский для разработчика должен быть как родной, хотябы на уровне чтения документации Но, ищущий да обрящет :!: http://www.ciam.ru/~sem/texts/boost-descr.htmИ напиши что именно не работает, всегда поможем
|
|
|
Записан
|
|
|
|
SeRzzz
Гость
|
|
« Ответ #12 : 27-04-2004 09:59 » |
|
СпасибА Англицкий язык для меня КАК РОДНОЙ, а русский РОДНОЙ (на нём читать приятней, если конечно перевод качественный). В первом листинге, на этапе компиляции было 35 ошибок. А во втором вот что: Compiling... 1.cpp G:\luaprojects\FIRSTPROG\1.cpp(76) : error C2065: 'TestFunc' : undeclared identifier G:\luaprojects\FIRSTPROG\1.cpp(82) : error C2065: 'bind_TestClass' : undeclared identifier Error executing cl.exe.
FIRSTPROG.exe - 2 error(s), 0 warning(s)
Может я что-то не так настроил?
|
|
« Последнее редактирование: 25-11-2007 17:20 от Алексей1153++ »
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #13 : 27-04-2004 13:37 » |
|
Судя по количеству ошибок, нужно дописать следующее #include<iostream> #include<string> Ты хоть скажи на каком уровне надо обьяснять, я думал ты знаешь что такое STL Второй листинг, это изменения для первого, я добавил один класс и переделал main
|
|
|
Записан
|
|
|
|
SeRzzz
Гость
|
|
« Ответ #14 : 28-04-2004 08:08 » |
|
Да ты прав, что такое STL я не знаю :oops: . Я вот только щас перехожу на VCPP До этого я в основном на Delphi писал. А на Сях только графику, поэтому с STL ознакомиться не довелось . в общем, уровень моих знаний по Сям я оцениваю как - "не очень". Я думаю что мне достаточно будет просто пояснять что испоьзуется (ну, и пару слов о том зачем это надо), а поподробнее я сам буду разбираться.
|
|
|
Записан
|
|
|
|
SeRzzz
Гость
|
|
« Ответ #15 : 06-05-2004 17:22 » |
|
У меня ещё вопрос. Как пользоваться таблицами и метатаблицами? А то что-то у меня ничего не работает, из того что в мануале написано про таблицы.
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #16 : 06-05-2004 19:13 » |
|
А что ты хочешь сделать ?
|
|
|
Записан
|
|
|
|
|