Вопросы по использованию FFI
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 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
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Вопросы по использованию FFI
Latest post of the previous page:
результат:Code: Select all
╔═══════════════════════════════╗
║ 1│ cdata<void *>: 0x00000007 ║ <- ok
║ 2│ cdata<void *>: 0x00000007 ║ <- ok
║ 3│ nil ║
║ 4│ 7 ║ <- ok
║ 5│ 0x01e04fa8 ║ <- ???
╚═════════ 5 arguments ═════════╝
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
Вопросы по использованию FFI
О да:
tostring(handle):match": (0x%w+)"
Что может быть проще tostring??
Вопросы по использованию FFI
Т.е. string.format "%p" понимает, а string:format -- нет? Семен Семеныч!zg wrote:string.format("%p",handle))
Почему это значение вам кажется странным? Указатель как указатель, нет?zg wrote:%p выводит что-то странное, да.
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Вопросы по использованию FFI
потому что это не хэндл.fml2 wrote:Почему это значение вам кажется странным? Указатель как указатель, нет?
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Вопросы по использованию FFI
почему вы решили, что он не работает?fml2 wrote:Куда по этому поводу писать (что %p не работает)?
Ликбез по Lua
Пытаюсь перевести программу на Си в Lua ffi.
Выполняю код:. Ошибок нет. Но если я попробую его исполнить еще раз возникает синтаксическая ошибка. В чем проблема и как сделать, чтобы при попытке "выполнить" include файл второй раз синтаксических ошибок не выдавалось.
Выполняю код:
Code: Select all
local ffi = require("ffi")
local C = ffi.C
ffi.cdef[[
static const unsigned WM_USER=0x0400;
static const unsigned WM_SETCONSOLEINFO=WM_USER+201;
]]
Code: Select all
╔═════════════════════ LuaMacro ══════════════════════╗
║ ';' expected near '=' at line 2 ║
║ stack traceback: ║
║ [C]: in function 'cdef' ║
║ :7: in main chunk ║
╟─────────────────────────────────────────────────────╢
║ { OK } ║
╚═════════════════════════════════════════════════════╝
- zg
- zero-gravity
- Posts: 6016
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Ликбез по Lua
определяется константа с уже существующим именем.gotar wrote:В чем проблема
gotar wrote:и как сделать, чтобы при попытке "выполнить" include файл второй раз синтаксических ошибок не выдавалось.
Code: Select all
local function safe_cdef(def) pcall(ffi.cdef,def) end
safe_cdef"static const unsigned WM_USER=0x0400;"
safe_cdef"static const unsigned WM_SETCONSOLEINFO=WM_USER+201;"
Ликбез по Lua
gotar
В cdef объявления - структуры и ф-ии, исполняемого кода там быть не должно.
Ваши присваивания можно просто перенести в lua код.
Про вторую попытку - имеется ввиду это: http://forum.farmanager.com/viewtopic.p ... 51#p119951 ?
В cdef объявления - структуры и ф-ии, исполняемого кода там быть не должно.
Ваши присваивания можно просто перенести в lua код.
Про вторую попытку - имеется ввиду это: http://forum.farmanager.com/viewtopic.p ... 51#p119951 ?
Вопросы по использованию FFI
Теперь у меня ругается на :
Поиск гуглом на LF_FACESIZE не дал определения этой константы. В winapi.lua ее тоже нет. Может кто нибудь найдет у себя чему она равна.
Code: Select all
╔═════════════════════════════ LuaMacro ══════════════════════════════╗
║ \\?\E:\1\pal.lua:19: unexpected symbol near 'LF_FACESIZE' at line 8 ║
║ stack traceback: ║
║ [C]: in function 'cdef' ║
║ \\?\E:\1\pal.lua:19: in main chunk ║
╟─────────────────────────────────────────────────────────────────────╢
║ { OK } ║
─ ╚═════════════════════════════════════════════════════════════════════╝
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Вопросы по использованию FFI
У меня (уже давно) есть макрофайл, вызывающий изредка падение Far. Я уже голову сломал, что это может быть, единственно, что удалось видоизменить его так, что падение происходит практически гарантированно:
Для падения нужно из панели, содержащей не менее 20 папок или файлов с комстроки вызвать
Вроде не вижу криминала в скрипте. Может у кого-нибудь возникнет идея, что с этим делать или как продебаггировать.
Для падения нужно из панели, содержащей не менее 20 папок или файлов с комстроки вызвать
lua:for k=1,300 do Panel.SetCustomSortMode(500) end
Вроде не вижу криминала в скрипте. Может у кого-нибудь возникнет идея, что с этим делать или как продебаггировать.
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Вопросы по использованию FFI
По поводу предыдущего поста - есть продвижение в понимании проблемы.
Выполнение любого одного из следующих двух пунктов прекращает падения:
1. Запрет сборки мусора (
2. Вставка в начало ф-ции Compare строки
Таким образом ясно, что падение вызывается освобождением величины rsm сборщиком мусора. Но возникает вопрос: какое право сборщик мусора имеет это делать, при том, что rsm является upvalue функции Compare, пусть даже она и не производит к нему доступа через Lua ???
Выполнение любого одного из следующих двух пунктов прекращает падения:
1. Запрет сборки мусора (
lua:collectgarbage"stop"
).2. Вставка в начало ф-ции Compare строки
local foo = rsm
.Таким образом ясно, что падение вызывается освобождением величины rsm сборщиком мусора. Но возникает вопрос: какое право сборщик мусора имеет это делать, при том, что rsm является upvalue функции Compare, пусть даже она и не производит к нему доступа через Lua ???