DLL для LUA плагина

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

DLL для LUA плагина

Post by Shmuel » Sat 05 Sep, 2015 14:36

Latest post of the previous page:

John Doe wrote: Ну свои я например правлю, или добавляю ссылки на рабочий код...
Я себе такой задачи не ставлю. Если после сообщения прошёл день-два, я о нём благополучно забываю.
John Doe wrote: Интересно почему такое умолчание?
Потому что оно удобно лично мне. (Не забывайте, что luaplug.mak приведен только как пример, и в билде luamacro.dll он не участвует).
John Doe wrote: И как можно усовершенствовать luaplug.mak, чтобы учитывался и вариант сборки gcc?
Определяйте в своём мейк-файле PATH_LIBS = $(FARDIR)\unicode_far\Release.$(DIRBIT).gcc выше строчки включения luaplug.mak

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

DLL для LUA плагина

Post by John Doe » Sat 05 Sep, 2015 14:50

Shmuel wrote: Я себе такой задачи не ставлю. Если после сообщения прошёл день-два, я о нём благополучно забываю.
Я тоже не ставлю себе такой задачи, но если уж натыкаюсь, то обычно правлю.
Shmuel wrote: luaplug.mak приведен только как пример
Я понимаю. И предлагаю добавить и второй возможный путь, чтобы пример было проще использовать (я не раз уже напарывался по невнимательности).

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

DLL для LUA плагина

Post by Shmuel » Sat 05 Sep, 2015 14:55

John Doe wrote: Я тоже не ставлю себе такой задачи, но если уж натыкаюсь, то обычно правлю.
Честь и хвала за это (и не только за это).
John Doe wrote: предлагаю добавить и второй возможный путь, чтобы пример было проще использовать.
Это повлечёт за собой и дополнение к документации. А времени нет.

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

DLL для LUA плагина

Post by John Doe » Sat 05 Sep, 2015 16:13

А если как-то так:

Code: Select all

ifndef PATH_LIBS
  INCLUDE = -L$(FARDIR)\unicode_far\Release.$(DIRBIT).gcc -L$(FARDIR)\unicode_far\Release.$(DIRBIT).vc
else
  INCLUDE = -L$(PATH_LIBS)
endif
Shmuel wrote: Это повлечёт за собой и дополнение к документации.
Да нет, там сейчас вообще не описан параметр PATH_LIBS.
Как и DIRBIT.

Т.е. дополнение требуется, но это не связанно с предлагаемыми изменениями luaplug.mak

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

DLL для LUA плагина

Post by Shmuel » Sat 05 Sep, 2015 16:34

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

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

DLL для LUA плагина

Post by John Doe » Sat 05 Sep, 2015 16:43

Shmuel wrote:Я же сказал - нет времени.
Я тоже проясню.
Себе я makefile сделал, соответственно лично мне ничего в этом плане не требуется.

Но недостатки имеются, так почему бы их не обсудить?
Результат обсуждения будет оформлен на мантисе (что тоже никого не обязывает)

User avatar
techie
Posts: 761
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 28 times
Been thanked: 2 times

DLL для LUA плагина

Post by techie » Mon 10 Jul, 2017 06:49

Shmuel wrote:
Wed 10 Sep, 2014 17:48
Эти DLL отличаются набором экспортируемых функций. luamacro.dll имеет свой набор, helloworld.dll - свой, и т.д.
Этот набор определяется в мейк-файле, а при сборке с VC2010 также и в .def-файле. Подробнее - в мануале LuaFAR.
Я понимаю, что для плагинописателей есть очевидные вещи, но как чайник я всё равно не догоняю - зачем плагину на Lua дополнительная кастомная DLL для экспорта функций? Почему адаптер, который загружает Lua скрипты не может динамически читать и экспортировать для Far нужные функции?

User avatar
techie
Posts: 761
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 28 times
Been thanked: 2 times

DLL для LUA плагина

Post by techie » Mon 10 Jul, 2017 08:34

Раз уж без luaplug.dll не обойтись, где её взять? Переименовать LuaMacro.dll покатит? Текущая таблица экспорта из неё:

Code: Select all

0x100065d0 ConfigureW 1
0x100066f0 ExitFARW 2
0x10006750 GetGlobalInfoW 3
0x100067e0 GetLuaState 4
0x10006820 GetMinFarVersionW 5
0x10006830 GetPluginInfoW 6
0x10006990 OpenW 7
0x10006a30 ProcessConsoleInputW 8
0x10006a80 ProcessDialogEventW 9
0x10006ad0 ProcessEditorEventW 10
0x10006b20 ProcessEditorInputW 11
0x10006b70 ProcessSynchroEventW 12
0x10006bc0 ProcessViewerEventW 13
0x10006d00 SetStartupInfoW 14
0x10006e40 luaopen_luaplug 15

User avatar
techie
Posts: 761
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 28 times
Been thanked: 2 times

DLL для LUA плагина

Post by techie » Mon 10 Jul, 2017 08:35

Почему не включить генерирование luaplug.dll в PluginSDK при сборке Far?

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

DLL для LUA плагина

Post by John Doe » Mon 10 Jul, 2017 08:39

techie wrote:
Mon 10 Jul, 2017 06:49
Почему адаптер, который загружает Lua скрипты
"Адаптеры" появились позже, а LuaFAR работает иначе.
techie wrote:
Mon 10 Jul, 2017 08:34
Переименовать LuaMacro.dll покатит?
Можно и так, хотя на самом деле к luaplug прилагается шаблон makefile, позволяющий собрать dll с нужными экспортами.
techie wrote:
Mon 10 Jul, 2017 08:35
Почему не включить генерирование luaplug.dll в PluginSDK при сборке Far?
Потому что никто не знает заранее какие экспорты нужны вашему плагину.

User avatar
techie
Posts: 761
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 28 times
Been thanked: 2 times

DLL для LUA плагина

Post by techie » Mon 10 Jul, 2017 09:04

John Doe wrote:
Mon 10 Jul, 2017 08:39
Потому что никто не знает заранее какие экспорты нужны вашему плагину.
Я вот тоже не знаю. Вопрос зачем нужны экспорты нигде не описан, и при этом постоянная путаница - я так понимаю есть функции, которые экспортирует сам Far и плагины могут их использовать, а есть функции экспортируемые плагином которые вызывает сам Far (callbacks). Так в DLL речь идёт о последних, правильно? Соответственно, экспорты нужны, если мой плагин на Lua хочет предоставить Far возможность вызова этих callbacks.

Есть какой-то список обязательный callbacks, который плагин на Lua должен поддерживать?

Я правильно понимаю, что для обычных плагинов обязательно нужно, чтобы экспортировался OpenW. Если плагин его не экспортирует, то Far не считает плагин за плагин, так? То же самое и с Lua? Если luaplug.dll не определяет OpenW то чтобы в скрипте не писалось, оно не вызовется.

А если luaplug.dll определяет OpenW, а в скрипте ничего нет - что должно произойти?
Если ничего, то может в эту luaplug.dll запихать все возможные callbacks, которые Far может дёрнуть?
Last edited by techie on Mon 10 Jul, 2017 09:06, edited 1 time in total.

User avatar
zg
zero-gravity
Posts: 5266
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 44 times
Contact:

DLL для LUA плагина

Post by zg » Mon 10 Jul, 2017 09:30

techie wrote:
Mon 10 Jul, 2017 09:04
Есть какой-то список обязательный callbacks, который плагин на Lua должен поддерживать?
есть.
techie wrote:
Mon 10 Jul, 2017 09:04
Я правильно понимаю, что для обычных плагинов обязательно нужно, чтобы экспортировался OpenW.
неправильно.
techie wrote:
Mon 10 Jul, 2017 09:04
Если ничего, то может в эту luaplug.dll запихать все возможные callbacks, которые Far может дёрнуть?
можно, но возможно снижение производительности.

Post Reply

Return to “Нужна помощь”