Вопросы по использованию FFI
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 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
Вопросы по использованию FFI
Latest post of the previous page:
Теперь у меня ругается на :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: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Вопросы по использованию FFI
У меня (уже давно) есть макрофайл, вызывающий изредка падение Far. Я уже голову сломал, что это может быть, единственно, что удалось видоизменить его так, что падение происходит практически гарантированно:
Для падения нужно из панели, содержащей не менее 20 папок или файлов с комстроки вызвать
Вроде не вижу криминала в скрипте. Может у кого-нибудь возникнет идея, что с этим делать или как продебаггировать.
Для падения нужно из панели, содержащей не менее 20 папок или файлов с комстроки вызвать
lua:for k=1,300 do Panel.SetCustomSortMode(500) end
Вроде не вижу криминала в скрипте. Может у кого-нибудь возникнет идея, что с этим делать или как продебаггировать.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Вопросы по использованию FFI
По поводу предыдущего поста - есть продвижение в понимании проблемы.
Выполнение любого одного из следующих двух пунктов прекращает падения:
1. Запрет сборки мусора (
2. Вставка в начало ф-ции Compare строки
Таким образом ясно, что падение вызывается освобождением величины rsm сборщиком мусора. Но возникает вопрос: какое право сборщик мусора имеет это делать, при том, что rsm является upvalue функции Compare, пусть даже она и не производит к нему доступа через Lua ???
Выполнение любого одного из следующих двух пунктов прекращает падения:
1. Запрет сборки мусора (
lua:collectgarbage"stop"
).2. Вставка в начало ф-ции Compare строки
local foo = rsm
.Таким образом ясно, что падение вызывается освобождением величины rsm сборщиком мусора. Но возникает вопрос: какое право сборщик мусора имеет это делать, при том, что rsm является upvalue функции Compare, пусть даже она и не производит к нему доступа через Lua ???
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Вопросы по использованию FFI
Всё, вопрос закрыт. Почему-то я был уверен, что величине достаточно быть upvalue у какой-то живой функции, чтобы спастись от сборщика мусора. Оказывается нет, если к величине нет обращений. Ниже следует пример (запускать из-под lua.exe (Lua 5.1) или luajit.exe).
Запускаем test.lua и видим, что величина pr подбирается сборщиком мусора, несмотря на то, что является upvalue функции sum.
Code: Select all
-- File 1: sum.lua
local pr = newproxy(true)
getmetatable(pr).__gc = function(o) io.write("__gc:",tostring(o),'\n') end
local function sum(a,b) return a+b end
return sum
Code: Select all
-- File 2: test.lua
local sum = dofile "sum.lua"
print(sum(3,4))
collectgarbage"collect"
print(sum(-3,-4))
- Aidar
- Posts: 541
- Joined: Mon 09 Mar, 2009 22:43
- Location: Kazan
- Has thanked: 8 times
- Been thanked: 7 times
- Contact:
Вопросы по использованию FFI
Спасибо за информацию.
Вот полезная ссылка по теме: upvalue memory leak в LuaJIT.
Вот полезная ссылка по теме: upvalue memory leak в LuaJIT.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Вопросы по использованию FFI
Действительно неочевидный случай.
Будь RS lua-таблицей, обсуждаемая величина не была бы собрана сборщиком.
Впрочем, в документации предупреждали http://luajit.org/ext_ffi_semantics.html#gc
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Вопросы по использованию FFI
Это совсем не тот материал из-за недопонимания которого я потратил много времени.John Doe wrote: Впрочем, в документации предупреждали http://luajit.org/ext_ffi_semantics.html#gc
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Получение привилегий backup/restore
Однако сказано, что второй аргумент функции представляет собой "A pointer to a null-terminated string". Наверно правильнее так:2useven10 wrote: ↑Tue 17 Jun, 2014 14:33Code: Select all
if FALSE ~= A.LookupPrivilegeValueA(nil,"Se"..name.."Privilege",v.Privileges[0].Luid) then
Code: Select all
if FALSE ~= A.LookupPrivilegeValueA(nil,"Se"..name.."Privilege\0",v.Privileges[0].Luid) then