Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> [C/C++] Пример плагина для Lua.
Cockney
сообщение 21.9.2017, 21:57
Сообщение #1


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Код элементарен. Хорошие примеры работы с API LUA можно найти в сорцах модуля math и др. , который поставляются с исходниками Lua. Особо не разобрался, т.к. протестировать нормально не могу, но вроде можно таким делом биндить классы из длл и другие фичи.

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



For GCC - Прикрепленный файл  gcc_ex.zip ( 1,91 килобайт ) Кол-во скачиваний: 683

For MSVC - Прикрепленный файл  PlugEx.zip ( 27,47 килобайт ) Кол-во скачиваний: 716


Сообщение отредактировал Cockney - 6.2.2019, 13:56
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 21.9.2017, 22:21
Сообщение #2


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



И да, в приоритете, если возможно - делайте сборку через gcc компилятор, т.к. он в отличие от студии не привязывает код к версии винды + не надо ставить редисты и т.д.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 11.2.2018, 14:59
Сообщение #3


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Обновил сорцы. Теперь собирается нормально. Добавил пару примеров функций.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 6.2.2019, 13:54
Сообщение #4


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Год медитаций позволил мне наконец-то собрать плагин под 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 !
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.2.2019, 14:05
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



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

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

MSYS2 нельзя ставить в песочницу - будьте внимательны. Будут сыпать ошибки named pipe поддержки, так же pacman не будет видеть уже установленные пакеты, а при попытке их установить будут происходить ошибки.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 6.2.2019, 14:12
Сообщение #6


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Цитата
1) Нет необходимости в модификации dll. Может быть подключена уже существующая dll.


Какая dll и к чему подключается ? Если dll вообще любая хоть из winapi подключается к luajit - то да. Если dll изначально написана под api lua то она подключится как к обычному lua, так и к jit. Проверенно на 2.41.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.2.2019, 14:19
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Какая dll и к чему подключается ? Если dll вообще любая хоть из winapi подключается к luajit - то да.

winapi биндинги через ffi уже созданы.
https://luapower.com/winapi


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 6.2.2019, 14:22
Сообщение #8


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Цитата
2) Скорость работы.



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

В целом - мне не особо интересна кухня всех ffi и прочего. Я дал платформу. Вкручивайте что хотите. Что лучше/хуже смотрите сами.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 6.2.2019, 22:03
Сообщение #9


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Я дал платформу.

За что тебе безусловно спасибо. (IMG:style_emoticons/default/thanks.gif)
Я просто сообщил о вариантах, которые имхо имеют право жить и опять же имхо уместно об этом здесь было написать. Если хочешь - почищу.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 6.2.2019, 23:24
Сообщение #10


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Ни в коем случае.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 18.2.2019, 13:29
Сообщение #11


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



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


Компилятор можно(я бы предпочел) ставить не из оболочки 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).
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rinat84
сообщение 7.3.2019, 3:20
Сообщение #12


*

Registred
Сообщений: 9
Регистрация: 3.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.664



(IMG:style_emoticons/default/biggrin.gif) то чувство когда собираешь из исходников 3 день ковыряю пытаюсь избавится от спама ident
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.3.2019, 21:58
Сообщение #13


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Успешно собран luasocket под mingw.

Работает ?



Прикрепленные файлы
Прикрепленный файл  lua.zip ( 53,55 килобайт ) Кол-во скачиваний: 485
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 22.1.2020, 18:33
Сообщение #14


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Кхм... Даж стыдно как-то стало, что не отписался. В общем этот сокет давно в работе и от него проблем и нареканий нет/почти нет.
Были какие-то не до конца мне понятные подвисания прослушивания порта. Т.е. даже когда выключаешь пилот, то порт остается занятым и лечится исключительно ребутом. Тем не менее данная проблема наблюдалась и на старом сокете. Подозреваю, что лечится через установку settimeout на сервере, т.к. проблемы возникали исключительно при некорректном обрыве связи. В остальном вылечен огромный ворох багов и шуршит просто шикарно. Весь год как часы =)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 0:28
Designed by Nickostyle