Помощь - Поиск - Пользователи - Календарь
Полная версия: [C/C++] Пример плагина для Lua.
UoKit.com Форумы > Кликер > UO Pilot > Плагины и доп. ПО
Cockney
Код элементарен. Хорошие примеры работы с API LUA можно найти в сорцах модуля math и др. , который поставляются с исходниками Lua. Особо не разобрался, т.к. протестировать нормально не могу, но вроде можно таким делом биндить классы из длл и другие фичи.

Сам собирал под VS 2017 CE. Кто сможет собрать и завести всю эту кухню - отпишите результат.



For GCC - Нажмите для просмотра прикрепленного файла
For MSVC - Нажмите для просмотра прикрепленного файла
Cockney
И да, в приоритете, если возможно - делайте сборку через gcc компилятор, т.к. он в отличие от студии не привязывает код к версии винды + не надо ставить редисты и т.д.
Cockney
Обновил сорцы. Теперь собирается нормально. Добавил пару примеров функций.
Cockney
Год медитаций позволил мне наконец-то собрать плагин под gcc.

Сорцы плагина в шапке.


1)Ставим MSYS2 (именно MSYS2, не MSYS) по инструкции

2)Выполняем:
Код

pacman -S mingw-w64-i686-gcc
pacman -S make

Закрываем msys.

Дальнейшая работа идем относительно корня установки msys.

3)Качаем исходники Lua.

4)Кидаем в папочку /home/<User>/lua-src

5)Запускаем mingw32 из папки msys.

6)Выполняем:
Код

cd /home/<User>/lua-src
make mingw
make install INSTALL_TOP=/home/<User>/lua


Lua установлен локально, чтобы не засорять окружение. Окошко не закрываем.

7)Качаем сорцы плагина.

8)Копируем все в папочку /home/<User>/plugin

9)Открываем Makefile и правим под себя пути в "Lua settings"

10)Выполняем:
Код
    
cd /home/<User>/plugin
make


или

Код

make build


для автоочистки от мусора.


11) Enjoy !
DarkMaster
Первый раз вижу нормальный ман по сброке в MSYS/Mingw.

Тем не менее хочу обратить внимание, что если идет разработка/сборка под пилот/luajit, то luajit.org рекомендует не использовать стандартный api lua для работы с плагинами. Они рекомендуют использовать ffi. Из плюсов:
1) Нет необходимости в модификации dll. Может быть подключена уже существующая dll.
2) Скорость работы.
Из минусов... хз минус ли, по мне скорее плюс, но тем не менее необходимо будет создать и описать в lua типы данных которые необходимо передать/принять. Т.е. это полуавтоматическое создание биндингов.

MSYS2 нельзя ставить в песочницу - будьте внимательны. Будут сыпать ошибки named pipe поддержки, так же pacman не будет видеть уже установленные пакеты, а при попытке их установить будут происходить ошибки.
Cockney
Цитата
1) Нет необходимости в модификации dll. Может быть подключена уже существующая dll.


Какая dll и к чему подключается ? Если dll вообще любая хоть из winapi подключается к luajit - то да. Если dll изначально написана под api lua то она подключится как к обычному lua, так и к jit. Проверенно на 2.41.
DarkMaster
Цитата
Какая dll и к чему подключается ? Если dll вообще любая хоть из winapi подключается к luajit - то да.

winapi биндинги через ffi уже созданы.
https://luapower.com/winapi
Cockney
Цитата
2) Скорость работы.



Спорное утверждение. dll уже работает на максимальной скорости, а оптимизацию "ввода/вывода" через api никто не отменял.

В целом - мне не особо интересна кухня всех ffi и прочего. Я дал платформу. Вкручивайте что хотите. Что лучше/хуже смотрите сами.
DarkMaster
Цитата
Я дал платформу.

За что тебе безусловно спасибо. thanks.gif
Я просто сообщил о вариантах, которые имхо имеют право жить и опять же имхо уместно об этом здесь было написать. Если хочешь - почищу.
Cockney
Ни в коем случае.
Cockney
Пишу как заметку для себя, но мало-ли кому пригодится в случае возникновения вопросов о странностях сборки с этим чудом.


Компилятор можно(я бы предпочел) ставить не из оболочки msys, а из файлика MinGW-W64-install.exe в начале списка.

Запускаем. Выбираем самую свежую версию.

Дальше вариантов выбора опций много и все они влияют на дальнейшее удовольствие работы с компилятором.

Если архитектура i686(x32), то можно выбрать 2 модели исключений : dwarf, sjlj
Если архитектура x86_64(x64), то можно выбрать уже seh и sjlj

Что это такое (справедливо для C++, не C):

1)dwarf - обработка исключений не в стиле винды. Если произойдет эксепшен в какой-то сторонней длл(собранной msvc, например), то из своей мы его не поймаем. Чуть лучше sjlj по скорости. В целом не рекомендуется.

2)sjlj - работает везде как часы. срезает 20% скорости кода.

3)seh - родной способ для винды. Работает только под x64 => создать dll плагин для пилота невозможно. Для остального софта - пожалуйста.

Что из этого следует :

1)Выбрать sjlj - компилятор становится двухцелевым, т.е. на машине х32 можно собрать бинарник для х64 и наоборот, но при этом теряем 20% скорости используя С++(потери будут и при сборках x32->x32, x64->x64).

2)Выбрать seh - можем собирать только х64 бинарники без минуса к скорости и взаимодействия с пилотом.

3)Собирать по старинке MSVC - все работает быстро на seh, но идет привязка к версии винды.

4)Не использовать C++ вообще (only gcc). Быстро, модно, молодежно. Нет всех плюсов C++.

Threads можно выбрать что угодно. Я пока не нашел отличий, да и не искал.

После установки из папки взять mingw64 и закинуть в папку с msys2(удалить в ней перед этим mingw64).
rinat84
biggrin.gif то чувство когда собираешь из исходников 3 день ковыряю пытаюсь избавится от спама ident
Нажмите для просмотра прикрепленного файла
Cockney
Успешно собран luasocket под mingw.

Работает ?

DarkMaster
Кхм... Даж стыдно как-то стало, что не отписался. В общем этот сокет давно в работе и от него проблем и нареканий нет/почти нет.
Были какие-то не до конца мне понятные подвисания прослушивания порта. Т.е. даже когда выключаешь пилот, то порт остается занятым и лечится исключительно ребутом. Тем не менее данная проблема наблюдалась и на старом сокете. Подозреваю, что лечится через установку settimeout на сервере, т.к. проблемы возникали исключительно при некорректном обрыве связи. В остальном вылечен огромный ворох багов и шуршит просто шикарно. Весь год как часы =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.