Anonymous
картину
Aydar
но это не меняет
Я правильно понял что ты при именно при загрузке дллки хочешь создать луастейт и запустить скрипт? Или стейт у тебя уже создан в другом месте и ты в dllmain хочешь что-то другое сделать?
Anonymous
у меня длл мейн вообще не инициализируется
Anonymous
но компилятор его оставил
Anonymous
Anonymous
он когда просто загружается, сразу выгружается
Anonymous
в каком смысле?
Aydar
в каком смысле?
В прямом где место в коде где ты сол стейт создаешь?
Aydar
опять же не понял
Попробуй убрать вот этот свой сол стейт и загрузку своего скрипта и тупо внутри dllmain пропиши sol::state lua; lua.script("print('Hello')"); Сработает?
Anonymous
Нет, не сработало.
Anonymous
я зафризил
Anonymous
основное приложение, подключился деббагером, подключил библиотеку, поставил бряк на длл маин
Anonymous
он даже не сработал
Anonymous
в общем, и интерфейс от длл не появился
Anonymous
Мне, кажется либо clang всё ломает, либо сол.
Anonymous
Мне, кажется либо clang всё ломает, либо сол.
Хочу еще добавить, что я использую clang в visual studio, возможно в этом и проблема
Anonymous
зафризил на время чтобы бряк поставить
Anonymous
потом разфризил
Anonymous
Ну у меня вообще энтри поинт не происходит
Anonymous
у меня будто длл ломается
Anonymous
при использовании сол
Anonymous
использую LuaJIT в связке с sol
Anonymous
Смотри, я зафризил программу заинжектил длл, включил в настройках деббагера прерываться на выгрузке/загрузке длл
Anonymous
после чего зашел в отладочные символы
Anonymous
нашел мою длл
Anonymous
открыл DllEntryPoint
Anonymous
и поставил бряк на самую первую строку
Anonymous
После чего расфризил
Anonymous
у меня длл загрузилась
Anonymous
а потом сразу же выгрузилась
Anonymous
если у меня нету строки soll:state
Anonymous
то у меня ui интерфейс и всё остальное прекрасно работает
Timur
c DllMain всё сложно и очень хрупко https://devblogs.microsoft.com/oldnewthing/20040128-00/?p=40853
Aydar
то у меня ui интерфейс и всё остальное прекрасно работает
В DllMain грубо говоря можно вызывать ограниченный сабсет функций (судя по https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-best-practices) чтобы понять как сделать правильно надо читать конкретно про injecting/hooking
mva
https://github.com/po5/mpv_sponsorblock
mva
автор - извращенец проклятый
mva
половину плагина написал на lua, вторую на питоне и из lua (через апи плеера) вызывает питоноинтерпретатор скармливая ему скрипт
mva
🤦‍♂️🤦‍♂️🤦‍♂️
mva
надо будет найти время и переписать
Aydar
автор - извращенец проклятый
Когда решение нужно "вот прямо сейчас" нормально. А переписать и позже можно.
mva
это не "нужно вот прямо сейчас"
mva
это итак переписываслось с жаваскрипта (оригинал - браузерный плагин)
mva
и быо это два года назад (11.11.09)
Aydar
это не "нужно вот прямо сейчас"
Ладно автор видимо действительно извращенец, но судя по количеству звёзд скрипт популярный значит всем пофиг как оно написано.
Александр
Ладно автор видимо действительно извращенец, но судя по количеству звёзд скрипт популярный значит всем пофиг как оно написано.
Никакого извращения нет - автор знает питон, у того в свою очередь есть необходимые библиотеки из коробки, поэтому автор просто сделал рабочее решение - вы на зависимости посмотрите - запросы, бд, хеши и пр. - 9/10 даже продвинутых пользователей не захотят возиться с luarocks и зоопарком версий, а так всё есть шанс что оно будет работать и не доставлять головной боли пользователю
Leon174
Luarocks штука веселая, да.
mva
мда
mva
решил посмотреть другой плагин, минималистичный, без плюшек и наворотов, кторый использует csv скачанный с сайта проекта, без всяких sqlite hastlib и прочего
mva
и вот: https://github.com/asakura42/sponsorblock-mpv-local/blob/main/main.lua#L10
mva
они там все поехавшие чтоли?
mva
вызывать лишний процесс шелла дл интерпретации скрипта в котором cat | sed | tr | sed?
mva
ну уж это-то на lua можно сделать и без внешних либ
mva
Александр
Что автору мешало чисто питон тогда использовать? Питон интерфейсы к mpv вроде есть
Разве, насколько я помню встроенная поддержка была только для луа и только недавно появилась для жса, для того, чтобы написать оный на питоне нужны были неофициальные допзависимости, которые очевидно пользователь поленится устанавливать
Александр
ну уж это-то на lua можно сделать и без внешних либ
Тут уже вопрос в цене и уверен автор не против, если вы поможете-перепишете этот кусок за него, оболочкой всё равно короче выходит
Александр
Ну вот например https://github.com/jaseg/python-mpv существует давно из зависимостей там только сам питон модуль, остальное все от mpv
Так что в этом хорошего ?) Т.е. вместо того, чтобы скачать два несчастных файлика нужно целое расширение-расширений устанавливать ?) Я сомневаюсь в практичности такого решения - да вызов питона из луа может и не камильфо, но а) автору не нужно было приспосабливаться под чужой интерфейс расширений б) Пользователю не нужно читать как настроить мпв под работу с расширением-расширений и не нужно pip install python-mpv, т.е. автор сделал минималистичное по своей сути решение - питон из коробки, луа из коробки, только закинь два файла куда нужно и всё.
mva
набирается стопка вот таких костылей-прослоек, всё друг друга неоптимально дёргает и получается как получается
Александр
вот как-то так весь энтерпрайз и работает
Ну что поделаешь - хочется и результат получить и не сидеть сутками за написанием расширения, но повторюсь - никто не запрещает lua/sh версию переписать - сделайте, если есть желание и время.
mva
желание есть, времени нет :(
mva
но я отложил в планы таки переписать :)
Александр
набирается стопка вот таких костылей-прослоек, всё друг друга неоптимально дёргает и получается как получается
Давайте честно, луа - язык расширений, но он был бы на этом поприще хорош только если либо разрабы, что встраивают - дописывали бы нужные библиотеки, что для луа были бы доступны из коробки, либо если бы авторы языка пошли по пути питона и тянули с луа продвинутую библиотеку полезностей, но первое время и поддержка, второе насколько знаю противоречит философии разрабов языка, поэтому тут такие костыли практически вынужденная мера, т.к. из коробки луа хорош только для обработки текстов, простой логики и как продвинутый язык для хранения настроек, всё остальное нужно прикручивать либо на Си, либо костылями
mva
луа был придуман как язык с минимальным футпринтом, для встраивания во всё что можно
mva
в частности, изначально, в нефтяное оборудование
mva
минимальный футпринт и путь питона не совместимы
mva
Python tries to give you as MUCH as possible, while Lua tries to give you as LESS as possible (cc) Matthew Wild
Александр
луа не язык расширений
Ну так, а встраивание для чего нужно ?) - Для написания расширений
Александр
не только
Это дискуссионный вопрос, но на деле я не вижу для луа места, за рамками языка для встраивания в компилируемые языки, для поддержки расширений/динамики поведения окружения ПО на более тяжёлых языках и языка для обработки текстов, остальное хотите или нет влечёт за собой костыли будь то luarocks или пример выше(смешение языков), другими словами для всего остального луа уже не хватает.
R
Lua настолько больше, чем просто язык расширений, что даже спорить на эту тему лень.
Александр
Lua настолько больше, чем просто язык расширений, что даже спорить на эту тему лень.
Стандартная библиотека к сожалению говорит об обратном, в изоляции язык становится минималистичным не только внешне, но и по назначению, более того тот же Иерусалимски сам постоянно об этом говорит, что главное - минимализм, встраивание и переносимость. К тому же стандартная библиотека сама по себе тоже расширение окружения луа, с той лишь разницей, что очень дешёвое для поддержки и стандартное для Си89/99.
mva
прошло то время, уже начали на ржавчине писать
R
Лень спорить. Кто в 2021 считает, будто Луа масенький и немощный, тот банально не в теме.
mva
Лень спорить. Кто в 2021 считает, будто Луа масенький и немощный, тот банально не в теме.
на самом деле, как по мне, слили бы уже давно puc-rio имплементацию и взяли бы luajit за основу.