Вопросы по использованию FFI
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Вопросы по использованию FFI
FFI — одна из стандартных библиотек luajit.
Позволяет из Lua кода вызывать внешние C-функции и использовать структуры данных C.
В данной теме задаём вопросы по использованию FFI
Заготовка для документации: viewtopic.php?f=57&t=8418&p=147610#p147610
Примеры готовых скриптов:
Предупреждение: viewtopic.php?p=147610#p147610
Позволяет из Lua кода вызывать внешние C-функции и использовать структуры данных C.
В данной теме задаём вопросы по использованию FFI
Заготовка для документации: viewtopic.php?f=57&t=8418&p=147610#p147610
Примеры готовых скриптов:
Предупреждение: viewtopic.php?p=147610#p147610
Re: Вопросы по использованию FFI
Latest post of the previous page:
При необходимости ничто не мешает изменить имя типа, не очень красиво, но сработает.А так вариант "Type[?]" мне тоже кажется более логичным.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
Можно было бы обеспечить единообразие использования таких типов, включив их определения в winapi.lua.2useven10 wrote:При необходимости ничто не мешает изменить имя типа, не очень красиво, но сработает.
А так вариант "Type[?]" мне тоже кажется более логичным.
(Не знаю какая у нас на этот счёт политика)
P.S.
Почитал The Old New Thing и понял что тут ошибка: Правильнее так
-
- Posts: 6815
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 526 times
Re: Вопросы по использованию FFI
По-хорошему, надо было бы farapi.lua и winapi.lua сделать модулями. Можно было бы при этом сделать и модуль winapiex (т.е. "extended"). Так как сделано сейчас - идеологически неправильно - эти файлы грузятся всегда, нужны они или не нужны.John Doe wrote:Можно было бы обеспечить единообразие использования таких типов, включив их определения в winapi.lua.
(Не знаю какая у нас на этот счёт политика)
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
Насколько я понимаю, winapi.lua раньше содержал только то, что необходимо для LuaMacro.
Затем добавились декларации базовых типов winapi.
И всё это сейчас занимает 8 кБ, так что смысла подгружать его отдельно нет.
Если только он не раздуется в 10 раз, что врядли произойдёт.
Затем добавились декларации базовых типов winapi.
И всё это сейчас занимает 8 кБ, так что смысла подгружать его отдельно нет.
Если только он не раздуется в 10 раз, что врядли произойдёт.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
farapi.lua есть смысл сделать модулем, luamacro от него не зависит.
И farapi.lua и winapi.lua можно сделать модулями, если убрать зависимость от них luamacro.
Сейчас просмотрел по-быстрому, и увидел только 3 зависимости в panelsort.lua (структура SortingPanelItem, тип HANDLE и функция StrCmpLogicalW).
И farapi.lua и winapi.lua можно сделать модулями, если убрать зависимость от них luamacro.
Сейчас просмотрел по-быстрому, и увидел только 3 зависимости в panelsort.lua (структура SortingPanelItem, тип HANDLE и функция StrCmpLogicalW).
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
Предвижу сложности. Возьмём такой сценарий.Shmuel wrote:Можно было бы при этом сделать и модуль winapiex (т.е. "extended").
1) Какой-то скрипт не использует модуль winapiex.lua, но для своих нужд определяет тип "TOKEN_PRIVILEGES"
2) Другой скрипт пытается после этого загрузить winapiex.lua, но обламывается, т.к. ffi не даёт переопределить.
И pcall в данном случае не особо поможет
P.S.
Насколько я могу судить, облом только при попытке переопределить структуры.
-
- Posts: 6815
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 526 times
Re: Вопросы по использованию FFI
Либо определения оба корректны, тогда проблем нет, либо (в крайне редких случаях) можно переименовать имя структуры.John Doe wrote:Хотя... Предвижу сложности. Возьмём такой сценарий.
......
Если быть последовательными, то кроме двух вышеупомянутых файлов модулями нужно сделать и panelsort.lua, и moonscript.lua. Их все можно поместить в папку LuaMacro\modules, а плагин будет добавлять эту папку в package.path.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
Проблема не в этом.Либо определения оба корректны, тогда проблем нет, либо (в крайне редких случаях) можно переименовать имя структуры.
Любое единичное переопределение можно завернуть в pcall, как мы и делаем сейчас.
Модуль же содержит множество определений, его в pcall не завернёшь.
Устранение конфликтов переименованием структур - это какая-то ерунда, т.к. во-первых от имён структур могут зависить другие определения.
И во-вторых, конфликт в своём скрипте я устраню как-нибудь. Но если я скачал скрипт с форума, то ковырять его как-то вообще нехорошо.
-
- Posts: 6815
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 526 times
Re: Вопросы по использованию FFI
Внутри модуля вполне можно использовать pcall, многократно.John Doe wrote:Любое единичное переопределение можно завернуть в pcall, как мы и делаем сейчас.
Модуль же содержит множество определений, его в pcall не завернёшь.
Если кто-то выложит для скачивания модуль или скрипт, несовместимый со стандартной поставкой Фара, это его проблемы.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
Не всё так просто.Shmuel wrote:Если кто-то выложит для скачивания модуль или скрипт, несовместимый со стандартной поставкой Фара, это его проблемы.
Скрипт будет совместим со стандартной поставкой.
И даже с другими скриптами, использующими модуль, если они выполняются ДО него.
Можно, но при большом количестве структур - это будет громоздко и медленно.Shmuel wrote:Внутри модуля вполне можно использовать pcall, многократно.
Любую проблему можно решить, я понимаю. Но зачем создавать её искуственно?
-
- Posts: 6815
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 526 times
Re: Вопросы по использованию FFI
Если скрипт определяет те же структуры, что есть в стандартной поставке, то он несовместим, вот и всё.John Doe wrote:Не всё так просто.
Скрипт будет совместим со стандартной поставкой.
И даже с другими скриптами, использующими модуль, если они выполняются ДО него.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
Re: Вопросы по использованию FFI
Сегодня совместим, а завтра мы добавили в поставку новые структуры, и стал несовместим. Нехорошо.