Вопросы по использованию FFI

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
2useven10
Posts: 3047
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 84 times

Re: Вопросы по использованию FFI

Post by 2useven10 » Thu 19 Jun, 2014 08:54

Latest post of the previous page:

При необходимости ничто не мешает изменить имя типа, не очень красиво, но сработает.
А так вариант "Type[?]" мне тоже кажется более логичным.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 10:35

2useven10 wrote:При необходимости ничто не мешает изменить имя типа, не очень красиво, но сработает.
А так вариант "Type[?]" мне тоже кажется более логичным.
Можно было бы обеспечить единообразие использования таких типов, включив их определения в winapi.lua.
(Не знаю какая у нас на этот счёт политика)

P.S.
Почитал The Old New Thing и понял что тут ошибка:
  1. local size = n*ffi.sizeof("LUID_AND_ATTRIBUTES") + ffi.sizeof("DWORD")
Правильнее так
  1. local size = (n-1)*ffi.sizeof("LUID_AND_ATTRIBUTES") + ffi.sizeof("TOKEN_PRIVILEGES")

2useven10
Posts: 3047
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 84 times

Re: Вопросы по использованию FFI

Post by 2useven10 » Thu 19 Jun, 2014 10:57

2useven10 wrote:ffi.sizeof("TOKEN_PRIVILEGES") неизвестен, если конечно нет варианта ffi.sizeof("TOKEN_PRIVILEGES", n)
Проверил, есть такой вариант.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 11:05

Есть, но даже если и не было бы, в ffi.sizeof можно передать не только "имя типа", но и саму уже созданную структуру (на прошлой странице было).

2useven10
Posts: 3047
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 84 times

Re: Вопросы по использованию FFI

Post by 2useven10 » Thu 19 Jun, 2014 11:08

John Doe wrote:Есть, но даже если и не было бы, в ffi.sizeof можно передать не только "имя типа", но и саму уже созданную структуру (на прошлой странице было).
Иногда размер нужен, а объекта нет.

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

Re: Вопросы по использованию FFI

Post by Shmuel » Thu 19 Jun, 2014 12:07

John Doe wrote:Можно было бы обеспечить единообразие использования таких типов, включив их определения в winapi.lua.
(Не знаю какая у нас на этот счёт политика)
По-хорошему, надо было бы farapi.lua и winapi.lua сделать модулями. Можно было бы при этом сделать и модуль winapiex (т.е. "extended"). Так как сделано сейчас - идеологически неправильно - эти файлы грузятся всегда, нужны они или не нужны.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 12:15

Насколько я понимаю, winapi.lua раньше содержал только то, что необходимо для LuaMacro.
Затем добавились декларации базовых типов winapi.
И всё это сейчас занимает 8 кБ, так что смысла подгружать его отдельно нет.

Если только он не раздуется в 10 раз, что врядли произойдёт.

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

Re: Вопросы по использованию FFI

Post by Shmuel » Thu 19 Jun, 2014 12:32

John Doe wrote:Если только он не раздуется в 10 раз, что врядли произойдёт.
farapi.lua + winapi.lua составляют вместе 78 KB. Вот вам и 10 раз налицо.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 13:19

farapi.lua есть смысл сделать модулем, luamacro от него не зависит.

И farapi.lua и winapi.lua можно сделать модулями, если убрать зависимость от них luamacro.
Сейчас просмотрел по-быстрому, и увидел только 3 зависимости в panelsort.lua (структура SortingPanelItem, тип HANDLE и функция StrCmpLogicalW).

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 13:28

Shmuel wrote:Можно было бы при этом сделать и модуль winapiex (т.е. "extended").
Предвижу сложности. Возьмём такой сценарий.
1) Какой-то скрипт не использует модуль winapiex.lua, но для своих нужд определяет тип "TOKEN_PRIVILEGES"
2) Другой скрипт пытается после этого загрузить winapiex.lua, но обламывается, т.к. ffi не даёт переопределить.

И pcall в данном случае не особо поможет

P.S.
Насколько я могу судить, облом только при попытке переопределить структуры.

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

Re: Вопросы по использованию FFI

Post by Shmuel » Thu 19 Jun, 2014 13:52

John Doe wrote:Хотя... Предвижу сложности. Возьмём такой сценарий.
......
Либо определения оба корректны, тогда проблем нет, либо (в крайне редких случаях) можно переименовать имя структуры.

Если быть последовательными, то кроме двух вышеупомянутых файлов модулями нужно сделать и panelsort.lua, и moonscript.lua. Их все можно поместить в папку LuaMacro\modules, а плагин будет добавлять эту папку в package.path.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 13:58

Либо определения оба корректны, тогда проблем нет, либо (в крайне редких случаях) можно переименовать имя структуры.
Проблема не в этом.

Любое единичное переопределение можно завернуть в pcall, как мы и делаем сейчас.
Модуль же содержит множество определений, его в pcall не завернёшь.

Устранение конфликтов переименованием структур - это какая-то ерунда, т.к. во-первых от имён структур могут зависить другие определения.
И во-вторых, конфликт в своём скрипте я устраню как-нибудь. Но если я скачал скрипт с форума, то ковырять его как-то вообще нехорошо.

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

Re: Вопросы по использованию FFI

Post by Shmuel » Thu 19 Jun, 2014 14:03

John Doe wrote:Любое единичное переопределение можно завернуть в pcall, как мы и делаем сейчас.
Модуль же содержит множество определений, его в pcall не завернёшь.
Внутри модуля вполне можно использовать pcall, многократно.

Если кто-то выложит для скачивания модуль или скрипт, несовместимый со стандартной поставкой Фара, это его проблемы.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 15:13

Shmuel wrote:Если кто-то выложит для скачивания модуль или скрипт, несовместимый со стандартной поставкой Фара, это его проблемы.
Не всё так просто.
Скрипт будет совместим со стандартной поставкой.
И даже с другими скриптами, использующими модуль, если они выполняются ДО него.
Shmuel wrote:Внутри модуля вполне можно использовать pcall, многократно.
Можно, но при большом количестве структур - это будет громоздко и медленно.

Любую проблему можно решить, я понимаю. Но зачем создавать её искуственно?

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

Re: Вопросы по использованию FFI

Post by Shmuel » Thu 19 Jun, 2014 15:20

John Doe wrote:Не всё так просто.
Скрипт будет совместим со стандартной поставкой.
И даже с другими скриптами, использующими модуль, если они выполняются ДО него.
Если скрипт определяет те же структуры, что есть в стандартной поставке, то он несовместим, вот и всё.

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

Re: Вопросы по использованию FFI

Post by John Doe » Thu 19 Jun, 2014 15:29

Сегодня совместим, а завтра мы добавили в поставку новые структуры, и стал несовместим. Нехорошо.

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

Re: Вопросы по использованию FFI

Post by Shmuel » Thu 19 Jun, 2014 15:34

John Doe wrote:Сегодня совместим, а завтра мы добавили в поставку новые структуры, и стал несовместим. Нехорошо.
Это не проблема, если сторонние скрипты будут вызывать require "winapi" перед своими ffi-определениями. Ошибка сразу и вылезет.

Post Reply

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