Код элементарен. Хорошие примеры работы с API LUA можно найти в сорцах модуля math и др. , который поставляются с исходниками Lua. Особо не разобрался, т.к. протестировать нормально не могу, но вроде можно таким делом биндить классы из длл и другие фичи.
Сам собирал под VS 2017 CE. Кто сможет собрать и завести всю эту кухню - отпишите результат.
For GCC -
gcc_ex.zip ( 1,91 килобайт )
Кол-во скачиваний: 694
For MSVC -
PlugEx.zip ( 27,47 килобайт )
Кол-во скачиваний: 726
И да, в приоритете, если возможно - делайте сборку через gcc компилятор, т.к. он в отличие от студии не привязывает код к версии винды + не надо ставить редисты и т.д.
Обновил сорцы. Теперь собирается нормально. Добавил пару примеров функций.
Год медитаций позволил мне наконец-то собрать плагин под gcc.
Сорцы плагина в шапке.
1)Ставим MSYS2 (именно MSYS2, не MSYS) по https://librebay.blogspot.com/2018/12/install-msys2-for-windows.html
2)Выполняем:
pacman -S mingw-w64-i686-gcc
pacman -S make
cd /home/<User>/lua-src
make mingw
make install INSTALL_TOP=/home/<User>/lua
cd /home/<User>/plugin
make
make build
Первый раз вижу нормальный ман по сброке в MSYS/Mingw.
Тем не менее хочу обратить внимание, что если идет разработка/сборка под пилот/luajit, то luajit.org рекомендует не использовать стандартный api lua для работы с плагинами. Они рекомендуют использовать ffi. Из плюсов:
1) Нет необходимости в модификации dll. Может быть подключена уже существующая dll.
2) Скорость работы.
Из минусов... хз минус ли, по мне скорее плюс, но тем не менее необходимо будет создать и описать в lua типы данных которые необходимо передать/принять. Т.е. это полуавтоматическое создание биндингов.
MSYS2 нельзя ставить в песочницу - будьте внимательны. Будут сыпать ошибки named pipe поддержки, так же pacman не будет видеть уже установленные пакеты, а при попытке их установить будут происходить ошибки.
Ни в коем случае.
Пишу как заметку для себя, но мало-ли кому пригодится в случае возникновения вопросов о странностях сборки с этим чудом.
Компилятор можно(я бы предпочел) ставить не из оболочки msys, а из https://sourceforge.net/projects/mingw-w64/files/.
Запускаем. Выбираем самую свежую версию.
Дальше вариантов выбора опций много и все они влияют на дальнейшее удовольствие работы с компилятором.
Если архитектура 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).
то чувство когда собираешь из исходников 3 день ковыряю пытаюсь избавится от спама ident
Успешно собран luasocket под mingw.
Работает ?
Прикрепленные файлы
lua.zip ( 53,55 килобайт )
Кол-во скачиваний: 495
Кхм... Даж стыдно как-то стало, что не отписался. В общем этот сокет давно в работе и от него проблем и нареканий нет/почти нет.
Были какие-то не до конца мне понятные подвисания прослушивания порта. Т.е. даже когда выключаешь пилот, то порт остается занятым и лечится исключительно ребутом. Тем не менее данная проблема наблюдалась и на старом сокете. Подозреваю, что лечится через установку settimeout на сервере, т.к. проблемы возникали исключительно при некорректном обрыве связи. В остальном вылечен огромный ворох багов и шуршит просто шикарно. Весь год как часы =)
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)