как запускать lua скрипты

Lua: как перестать встраивать и начать жить

Lua: как перестать встраивать и начать жить

За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Чтобы продемонстрировать возможности Lua, я покажу как с его использованием создать небольшую программу для построения графиков по точкам с возможностью сохранения графика в виде файла изображения.

В качестве графического тулкита будем использовать iup — кроссплатформенную библиотеку, изначально созданную с расчетом использования из Lua.

Установка Lua SDK

В рамках идеи использования Lua как самостоятельного ЯП, была создана сборка Lua for Windows, которая содержит себе библиотеки, необходимые в повседневных задачах, возникающих при программировании под указанную ОС: работы с БД, GUI, парсинг XML и т.д. Пусть вас не смущает, что версия Lua в сборке 5.1, а не 5.2 — особой разницы в нашем случае между ними нет.

Скачайте и установите сборку.

Краткое описание концепции iup
Код программы
Пара слов о развертывании

Скрипт можно запустить при помощи команды:

В данном случае библиотеки будут подключаться из поддиректории clibs/, которая находится в директории, куда был установлен Lua for Windows. Чтобы максимально компактно упаковать скрипт и библиотеки для переноса на другую машину, достаточно скопировать в одну папку следущие файлы(указаны с относительными путями от директории установки Lua):

Не забудьте поместить в эту папку и сам скрипт с программой. Теперь вы можете перенести эту папку на другую машину и запустить вашу программы командой, указанной выше. При этом никакие другие действия по установке библиотек и рантайма не нужны.

К сожалению файлы cd.dll, cdluad51.dll и iupcd.dll в данной версии Lua for Windows могут работать некорректно, поэтому рекомендую взять их из архива по ссылке ниже.

Итоги

Архив с рабочей версией тут, для удобства добавлена пускалка app.bat.

как запускать lua скрипты. lua1. как запускать lua скрипты фото. как запускать lua скрипты-lua1. картинка как запускать lua скрипты. картинка lua1. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

как запускать lua скрипты. lua2. как запускать lua скрипты фото. как запускать lua скрипты-lua2. картинка как запускать lua скрипты. картинка lua2. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

В результате получили, пусть и неказистую, утилиту, имеющую такой же функционал, как и если бы она была написана на «серьезном» языке программирования. При этом простую в развертывании и суммарным весом менее 2 мб. Потребление памяти — около 7 мб. Исходный код доступен для редактирования, сам Lua интерактивно понятен, что упрощает доработку подобного софта на местах.

На мой взгляд, это отличный выбор для написания учебного софта для школ и институтов, а также для внутреннего использования на предприятиях. Так как слабые машины до сих пор в изобилии присутствуют в подобных местах по всему СНГ, то использование Luа подобным образом целесообразно, особенно в свете постепнного прихода Linux на десктопы. К тому же тенденцию потери исходников самописного софта при жуткой его же забагованности можно приравнять к национальному бедствию.

Источник

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Что нужно знать

C# на приличном уровне, иметь понятие об основах программирования, а также о подключении ссылок в проекте на Visual Studio

Начало

Исходники (со всеми dll, конечно) выложены в конце поста

LuaInterface — библиотека для удобной интеграции между Lua и CLR
Lua — очень легкий скриптовый язык программирования. Вот его разбор
Для чего нужны скрипты — выдержка из другого моего поста

Но есть способ, на голову выше — использование скриптов.

«Окей, для таких дел хватает обычного файла с описанием характеристиков игрока. Но что делать, если в бурно развивающемся проекте почти каждый день приходится немножко изменять логику главного игрока, и, следовательно, много раз компилировать проект?»
Хороший вопрос. В этом случае нам на помощь приходят скрипты, держащие именно логику игрока со всеми характеристиками либо какой-либо другой части игры.
Естественно, удобнее всего держать, логику игрока в виде кода какого-нибудь языка программирования.
Первая мысль — написать свой интерпретатор своего скриптового языка, выкидывается из мозга через несколько секунд. Логика игрока определенно не стоит таких жутких затрат.
К счастью, есть специальные библиотеки скриптовых языков для С++, которые принимают на вход текстовый файл и выполняют его.

Об одном таком скриптовом языке Lua пойдет речь.

Теперь, когда у нас есть проект с подключенным LuaInterface, переходим к коду!

LuaInterface — основы

Основной класс этой библиотеки — Lua

Объявление констант

Очень просто можно объявить константы. Делается это так

В качестве значения может выступать что угодно — число, строка, даже классы и структуры (о том, как с ними работать, будет дальше)

Регистрация функций

В Lua можно зарегистрировать функцию из C#

Регистрация классов и структур

Одна из самых приятных сторон LuaInterface, которая может удивить тех, кто использует Lua совместно с C++, это то, что можно регистрировать объект класса и после этого вызывать в скрипте разные функции «напрямую»
То есть можно сделать так:

И после этого сделать Lua скрипт с таким содержанием:

Выполнение Lua кода

Выполнить Lua код (со всеми зарегистрированными функциями и константами) можно двумя способами
Первый — прямиком из C#

(Оба метода возвращают значение object[] — это то, что возвращает Lua скрипт после выполнения)

Обработка исключений

Для обработки исключений — ошибок, которые могут выскочить во время выполнения скрипта, следует использовать LuaException err

Вызов методов из Lua

Для вызова метода из Lua надо выполнить скрипт, выудить метод, и выполнять его когда потребуется.
Пример

Также в Call(params object[] args) можно передавать входные параметры для функции
Тот же финт срабатывает и со значениями, только вместо LuaFunction используем string, int, double и так далее

Дополнительные материалы

как запускать lua скрипты. 01af2ca347dec0f26d06f8a7f8c3aad9. как запускать lua скрипты фото. как запускать lua скрипты-01af2ca347dec0f26d06f8a7f8c3aad9. картинка как запускать lua скрипты. картинка 01af2ca347dec0f26d06f8a7f8c3aad9. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.
Символика Lua

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.
Love2D — один из самых популярных движков на Lua

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.
Мод для Minecraft на Lua

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.
https://bitbucket.org/Izaron/luaforhabr/src
Исходный код

Источник

Добавление скриптинга в программу с помощью Lua

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.
Lua это мощный, быстрый, легкий, встраиваемый язык сценариев. С его помощью можно легко и быстро добавить поддержку скриптинга в вашу программу.
Это может понадобиться в тех случаях, когда вы хотите дать возможность пользователям производить самостоятельную донастройку (кастомизацию) вашей программы, когда вы не хотите перекомпилировать весь проект, при внесении каких-либо изменений в логику работы программы, либо хотите разделить работу над движком и работу над логикой между разработчиками (например, при написании игр).

В этой статье, с помощью простой программы, я хочу показать пример встраивания Lua в ваш проект.

Примеров программ, которые используют Lua достаточно много. Далеко не полный список программ, использующих Lua, можно посмотреть здесь Lua Wiki и здесь Wikipedia

Я приведу пример простой программы, которая принимает в качестве аргументов путь к директории, перечисляет файлы и подкаталоги, передает их в скрипт. Скрипт, с помощью регулярных выражений ищет соответствие в путях, передаваемых файлов и, если находит, переименовывает файл согласно определенным правилам.

Пример я создавал в Visual Studio под Windows. Несмотря на это, приведенный код, за исключением нескольких функций (перечисление файлов, переименование файла), специфичных для Windows, после небольшой адаптации будет работать и на других платформах, т.к. Lua является кроссплатформенным языком сценариев.

Начнем с того, что посетим официальный сайт и скачаем Lua для своей платформы. Для Windows подойдет вот этот архив, включающий в себя библиотеки линковщика, динамические библиотеки и заголовочные файлы Lua.

Почему extern «C»? Lua написан на ANSI C, если попытаться включить файлы без extern «C» то мы получим множество ошибок, таких как:

Это вызвано тем, что соглашения о вызовах в C отличаются от соглашений в C++.

Не забудем подключить библиотеку линковщика:

Теперь необходимо объявить и инициализировать экземпляр Lua интерпретатора.

int _tmain( int argc, _TCHAR* argv[])
<
// Инициализируем экземпляр
g_LuaVM = lua_open();
.
// Закрываем
lua_close(g_LuaVM);
>

Теперь нам необходимо объявить и реализовать две функции, которые будут вызываться из Lua. Первая будет искать соответствие имени файла регулярному выражению:

Вторая — переименовывает файл:

Остановимся подробнее на реализации второй:

// В качестве параметров принимает текущий путь к файлу и новое имя файла
// В случае успеха возвращает 1, иначе 0
int LuaRenameFile(lua_State *luaVM)
<
// Получаем число переданных из Lua скрипта аргументов
int argc = lua_gettop(luaVM);

// Количество возвращаемых значений
return 1;
>

strDestination = strSource.substr(0, strSource.rfind(‘\\’) + 1) + strDestination;

int nResult = ( int )::MoveFileEx(strSource.c_str(), strDestination.c_str(), MOVEFILE_REPLACE_EXISTING|MOVEFILE_WRITE_THROUGH);

// Возвращаем в Lua скрипт результат выполнения MoveFileEx
lua_pushnumber(luaVM, nResult);

// Количество возвращаемых значений
return 1;
>

Как видно — ничего сложного: проверяем количество переданных аргументов, проверяем тип аргументов, извлекаем, выполняем переименование файла и возвращаем результат.

Теперь нам необходимо дать Lua знать, о экспортируемых функциях, делается это просто:

lua_register(g_LuaVM, «RenameFile», LuaRenameFile);
lua_register(g_LuaVM, «MatchString», LuaMatchString);

RenameFile и MatchString это имена функций, которые будут «видны» в скрипте.

Создадим скрипт, выполняющий всю работу:

Чтобы совсем стало понятно, привожу кусок кода, который вызывает эту функцию

// Переместить на начало стека функцию onFileFound
lua_getglobal(g_LuaVM, «onFileFound»);
// Поместить следующим элементом в стек путь к найденному файлу (fileName в скрипте)
lua_pushstring(g_LuaVM, strFilePath.c_str());

Осталось только загрузить скрипт из нашей программы:

// Загружаем скрипт
int s = luaL_loadfile(g_LuaVM, szScriptPath);

// Выполняем крипт
s = lua_pcall(g_LuaVM, 0, LUA_MULTRET, 0);

Как видно встраивание Lua скриптинга в программу является, по сути, тривиальной задачей и вместе с тем дает широкое поле для творчества.

Ниже приведен список ресурсов, на которых можно почитать о Lua более подробно.

Источник

Ваш Первый скрипт QLUA

Ну вот наконец и пришло время для написания нашего первого скрипта. Начнем разбираться мы именно со скрипта, а не с индикатора. Вообще разницы большой нет, но скрипт немного проще, по моему мнению, поэтому я решил начать с него. Если вы читаете сайт с самого начала, то вы знаете что скрипты могут располагаться в любом месте на нашем компьютере. Обычно их располагают в папке с программой QUIK, создав в ней папку для скриптов. Мы поступим так же. Откройте папку, где установлена программа QUIK.

Необходимые каталоги и файлы

Создайте в ней новую папку и назовите ее lua, в ней будут храниться все ваши написанные скрипты. Перейдите в папку lua и создайте в ней текстовый документ. Для этого в пустом месте нажмите правую кнопку мыши, выберите пункт создать, и найдите Текстовый документ. Нажмите на него, введите имя нашего будущего скрипта. Я стараюсь не использовать русские буквы в названиях поэтому всегда всё пишу латиницей. Напишите например myNewScript. Самое главное изменить расширение, так как вы создаете текстовые документ, то расширение файла txt, а вам необходимо написать lua. В итоге у вас должно получиться myNewScript.lua Кстати говоря, в настройках вашей операционной системы Windows возможно отключен показ расширение файлов, если вы не видите при создании текстового документа .txt, прописывать расширение lua нет смысла, так как Windows автоматически добавит расширение .txt, в независимости от того что вы указали .lua. Поэтому либо включите показ расширений, либо создавайте документ из notepad.

Для создания документа из notepad, запускаете программу notepad. Вверху у вас будет отображаться вкладка new 1. В меню выберите пункт синтаксисы, большую английскую букву L и выбираете пункт lua. Теперь в меню выберите пункт Файл и ищите подпункт Сохранить как. Появляется окно, переходите в папку, где у вас установлена программа QUIK, в ней ищите и открываете созданную ранее папку lua. Внизу где написано имя файла пишите myNewScript А вот ниже, где написано тип файла, у вас уже выбран пункт Lua Source file, если не выбран ищите и выбираете. Нажимаете сохранить.

Если вы читали на моём сайте статьи из раздела Рабочее место, то помните что мы в программе notepad++ создавали панель Проект 1 и теперь думаю стоит поместить созданный нами файл в эту панель. Перейдите в статью Проекты в notepad++ если не знаете как это делается.

Ну что же с основами разобрались, теперь переходим к самому интересному, к написанию кода. Так как скрипты и индикаторы это дополнительные модули к языку lua, то информация о том как создается скрипт будет находиться как раз в файле помощи QLUA.chm, что находится в каталоге с программой. Для того чтобы завершить данную главу напишем простой скрипт

Сохраните изменения в файле, синяя дискетка в левом верхнем углу.

Первый запуск

Пока что совершенно не понятен код, но не спешите, все разберем по порядку, а пока перепишите, запустите и посмотрите на результат.

как запускать lua скрипты. scriptList. как запускать lua скрипты фото. как запускать lua скрипты-scriptList. картинка как запускать lua скрипты. картинка scriptList. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Окно Список доступных скриптов

как запускать lua скрипты. quik Info encode. как запускать lua скрипты фото. как запускать lua скрипты-quik Info encode. картинка как запускать lua скрипты. картинка quik Info encode. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Ошибка кодировки в файле скрипта

Вернитесь в программу notepad++, где написан код скрипта, в меню найдите пункт Кодировки, и выберите пункт Преобразователь в ANSI. Сохраните изменения, перейдите в QUIK и снова запустите скрипт. Теперь у вас в информационном окне отображается текст «Выполнен запуск первого скрипта». Или используйте кодировку Windows-1251, ее можно найти в списке кодировок в том же пункте меню.

как запускать lua скрипты. quik Info encode true. как запускать lua скрипты фото. как запускать lua скрипты-quik Info encode true. картинка как запускать lua скрипты. картинка quik Info encode true. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Нормальная кодировка в скрипте Квик

Ну что же, скрип написан, скрипт запущен, скрипт выполнен успешно. Вы сделали ещё один шаг, и рекомендую не останавливаться на этом, а двигаться только вперед. Дальше будет все еще интереснее и интереснее, мы разберемся с тем что мы вообще понаписали, как выполняется скрипт и много много чего еще.

Источник

Что такое скрипты и с чем их едят — Lua & C++

Добрый день, Хабрахабр!
Решил написать этот топик на тему скриптов

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Что нужно знать?

Но есть способ, на голову выше — использование скриптов.

Решение проблемы

«Окей, для таких дел хватает обычного файла с описанием характеристиков игрока. Но что делать, если в бурно развивающемся проекте почти каждый день приходится немножко изменять логику главного игрока, и, следовательно, много раз компилировать проект?»
Хороший вопрос. В этом случае нам на помощь приходят скрипты, держащие именно логику игрока со всеми характеристиками либо какой-либо другой части игры.
Естественно, удобнее всего держать, логику игрока в виде кода какого-нибудь языка программирования.
Первая мысль — написать свой интерпретатор своего скриптового языка, выкидывается из мозга через несколько секунд. Логика игрока определенно не стоит таких жутких затрат.
К счастью, есть специальные библиотеки скриптовых языков для С++, которые принимают на вход текстовый файл и выполняют его.

Об одном таком скриптовом языке Lua пойдет речь.

Как это работает?

Прежде чем начать, важно понимать, как работает скриптовый язык. Дело в том, что в скриптовых языках есть очень мало функций, при наличии конструкций for, while, if, прочих.
В основном это функции вывода текста в консоль, математические функции и функции для работы с файлами.
Как же тогда можно управлять игроком через скрипты?

Мы в С++-программе делаем какие-либо функции, «регистрируем» их под каким-нибудь именем в скрипте и вызываем в скрипте. То есть если мы зарегистрировали функцию SetPos(x,y) для определения позиции игрока в С++-программе, то, встретив эту функцию в скрипте, «интерпретатор» из библиотеки скриптового языка вызывает эту функцию в С++-программе, естественно, с передачей всех методов.
Удивительно, да? 🙂

UPD: Внимание! Один юзер обратился мне с мейлом, что, когда я заливал код, я не полностью устранил все ошибки — habrahabr.ru/post/196272/#comment_6850016
В коде с позволения хабра проникли жучки
Замените участки кода вроде

И еще вместо lua_CFunction проскакивает lua_cfunction
Спасибо!

Я готов!

Когда вы поняли преимущества скриптовых языков программирования, самое время начать работать!
Скачайте из репозитория на гитхабе (низ топика) lib’у и includ’ы Lua, либо возмите их на официальном сайте.

Создаем консольный проект либо Win32 (это неважно) в Visual Studio (у меня стоит версия 2012)

Заходим в Проект->Свойства->Свойства конфигурации->Каталоги VC++ и в «каталоги включения» и «каталоги библиотек» добавьте папку Include и Lib из репозитория соответственно.

Теперь создаем файл main.cpp, пишем в нем:

Как вы догадались, у меня консольное приложение.

Теперь переходим к кодингу

Обещаю, что буду тщательно объяснять каждый момент

У нас за скрипты будет отвечать класс Script. Я буду объявлять и одновременно реализовывать функции в Script.h/.cpp
Создаем Script.cpp и пишем в нем

Создаем Script.h и пишем в нем

После 2 строчки и перед #endif мы определяем класс скриптов
Этот код пишется для предотвращения взаимного включения файлов. Допустим, что файл Game.h подключает Script.h, а Script.h подключает Game.h — непорядок! А с таким кодом включение выполняется только 1 раз

Теперь пишем внутри этого кода вот это

Первая строчка подключает сам lua.lib из архива.
Для чего нужен extern «C»? Дело в том, что lua написан на С и поэтому такой код необходим для подключения библиотек.

Дальше идет подключение хорошо известных многим файлов для работы с консолью

Теперь приступим к определению класса

Самый главный объект библиотеки Lua для C++ — lua_State, он необходим для выполнения скриптов

Дальше идут публичные функции

Эта функция инициализирует lua_State

Его определение в Script.cpp

Первой строчкой мы инициализируем наш lua_State.
Потом мы объявляем список «подключенных библиотек». Дело в том, что в «чистом» виде в луа есть только функция print(). Для математических и прочих функций требуется подключать специальные библиотеки и потом вызывать их как math.foo, base.foo, io.foo. Для подключения других библиотек добавьте в lualibs, например, <«math», luaopen_math>. Все названия библиотек начинаются с luaopen_. в конце lialibs должен стоять

Просто используем lua_close()

А эта функция выполняет файл. На вход она принимает название файла, например, «C:\\script.lua».
Почему она возвращает int? Просто некоторые скрипты могут содержать return, прерывая работу скрипта и возвращая какое-нибудь значение.

Как вы видите, я выполняю скрипт и возвращаю int. Но возращать функция может не только int, но еще и bool и char*, просто я всегда возвращаю числа (lua_toboolean, lua_tostring)

Теперь мы сделаем функцию, регистрирующую константы (числа, строки, функции)

Мы действуем через шаблоны. Пример вызова функции:
Ее определение

Для каждого возможного значения class T мы определяем свои действия.
*Капитан* последнее определение — регистрация функции
Функции, годные для регистрации, выглядят так:

Где n — количество возвращаемых значений. Если n = 2, то в Луа можно сделать так:

Читайте мануалы по Луа, если были удивлены тем, что одна функция возвращает несколько значений 🙂

Следующая функция создает таблицу для Луа. Если непонятно, что это значит, то тамошная таблица все равно что массив

Следующая функция регистрирует элемент в таблице.

Если вы не знаете Lua, вы, наверное, удивлены тем, что в один массив помещается столько типов? 🙂
На самом деле в элементе таблицы может содержаться еще и таблица, я так никогда не делаю.

Наконец, заполненную таблицу нужно зарегистрировать

Ничего особенного нет

Следующие функции предназначены в основном только для функций типа int foo(lua_State*), которые нужны для регистрации в Луа.

Первая из них — получает количество аргументов

Эта функция нужна, например, для функции Write(), куда можно запихать сколь угодно аргументов, а можно и ни одного
Подобную функцию мы реализуем позже

Следующая функция получает аргумент, переданный функции в скрипте

Можно получить все типы, описывавшиеся ранее, кроме таблиц и функций
index — это номер аргумента. И первый аргумент начинается с 1.

Наконец, последняя функция, которая возвращает значение в скрипт

Боевой код

Пора что-нибудь сделать!
Изменяем main.cpp

Компилируем. Теперь можно приступить к тестированию нашего класса

Помните, я обещал сделать функцию Write? 🙂
Видоизменяем main.cpp

А в папке с проектом создаем файл script.lua

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Компилируем и запускаем проект.

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Теперь изменяем script.lua

Теперь программа будет выводить по 2 строки («\n» — создание новой строки), ждать нажатия Enter и снова выводить строки.

как запускать lua скрипты. image loader. как запускать lua скрипты фото. как запускать lua скрипты-image loader. картинка как запускать lua скрипты. картинка image loader. За Lua прочно закрепилась слава полуязыка — инструмента, который при случае можно встроить, чтобы заскриптовать приложение, написанное на компилируемом языке вроде С++. Тем не менее Lua является вполне самостоятельным языком, имеющим свой интерпретатор, возможность создания модулей, большое число библиотек, и при этом данный ЯП обладает минимальным размером среди аналогов. Проще говоря у нас есть все, чтобы создавать такие же приложения как на perl, python, и вообще любом другом распространенном языке программирования.

Экспериментируйте со скриптами!

Вот пример main.cpp с функциями и пример script.lua

Полезные советы
Вопросы и ответы

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *