|
|
|
Помогите освоить LUA |
|
|
Cockney |
9.3.2019, 13:17
|
Master
Сообщений: 1.395
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21064
Пользователь №: 16.156
|
Хочу иметь Код int func(uint addr, uint x1, uint y1, uint x2, uint y2, uint* usl, uint numf) на входе в длл. с возможностью вызова из скрипта Код fc.func(img, 1,1,100,100, {B = 10}, 10) с возможностью Цитата проверка наличия в lua'шной таблицы полей usl.* из Си кода, НЕ ИЗ СКРИПТА.
|
|
|
|
DarkMaster |
9.3.2019, 13:34
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
https://luajit.org/ext_ffi.html последний пример. Т.е. походу через new придется объявить массив. Т.е. будет: Код ffi.cdef[[ typedef struct { uint8_t red, green, blue, alpha; } rgba_pixel; ]] local usl = ffi.new("rgba_pixel[1]") -- тут может быть косяк с синтаксисом. ffi.new("rgba_pixel[?]", 1) my_func(usl) Цитата fc.func(img, 1,1,100,100, {B = 10}, 10) может проканает прозрачно, возможно придется сделать микро-обертку на луа для засовывания луа таблицы в new. Надо тестить. Сообщение отредактировал DarkMaster - 9.3.2019, 13:35
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
9.3.2019, 15:18
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
Цитата Массив то по указателю улетит а дальше что ? Как там выцепить R,G или RG2, если порядок не определен. Порядок не определен в луа таблице. Когда ты объявляешь массив или структуру через new - он определен жестко. Это типы данных си в чистом виде. По поводу передачи my_func({b=100}) вполне возможно по имени ключа подхватит. Цитата Ладно, это нерешаемая при помощи ffi проблема, по крайней мере пока. Сомненеия у меня большие. Тут либо пройдет вышеописанный способ либо знания пошире нужно. Цитата Возврат из функции тоже предлагаешь делать указателем ? Если ты хочешь вернуть кучу параметров, то вариантов особо нет. Причем это не луа, а си не даст. Я бы предложил вернуть структурой. Причем ее объявлять даже не нужно будет нигде кроме cdef. Т.е.: Код ffi.cdef[[ typedef struct { uint8_t red, green, blue, alpha; } rgba_pixel; rgba_pixel my_func(); ]] local result = my_func() print (result.red + 1, result.green / 2, result.blue, result.alpha)
Все прозрачненько. Цитата Кто память освобождать будет ? result = nil Сообщение отредактировал DarkMaster - 9.3.2019, 15:58
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
10.3.2019, 18:21
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Я не стал морочиться с dll. Поскольку я отказался от чтения памяти при поиске, а работаю теперь напрямую с СИ-шными массивами, прирост скорости при непосредственно самом поиске будет незначительным. Лишнее время тратится только на получения СИ-шного массива образа снимка экрана, на моей машинке - это всего около 2 тысячных секунды (1920х1080). Плюс вопрос о порядке ключей в таблице так и остался открытым, как его передавать в DLL? Хотя конечно можно задавать условие и строкой, как я раньше и делал, на какие-то микросекунды получается медленнее. Единственно, что реально было бы круче в DLL - анализ контрастности пикселей снимка экрана. Только таких задач на практике - на пальцах одной руки можно пересчитать и если у продвинутого пользователя возникнет такая задача, можно сделать локальную функцию, выкинув из неё всё лишнее и будет не особо медленнее. Я так и сделал и для колора и для имиджа (для поиска в условиях день-ночь). Но вы парни - молодцы, что пытаетесь всё-таки сделать DLL!!!
|
|
|
|
NoName212 |
14.3.2019, 14:00
|
Neophyte
Сообщений: 13
Регистрация: 6.10.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.068
Возраст: 28
|
Можно ли сохранить урл страницы открытой в браузере в памяти пилота? Получилось сохранить его в файл но, этого не достаточно... вот код, сохраняет в файл урл(если файл есть, если нету то код скрипта туда запишет) Код --lua function copyUrl () wait ("1000") local x, y = 260, 448 move (x, y) wait ("1000") kright (x, y) wait ("1000") clickoffsetx (30) clickoffsety (120) move (x, y) wait ("1000") kleft (x, y) local text = clipboard () write ([[C:\DAYR_LAST\1111111.txt]], text) end copyUrl () а вот попытки сохранить урл в память не увенчались успехом. Там от ссылки отрезать нужно "http://", сравнить её с другими ссылками в общем (IMG: style_emoticons/default/ohmy.gif)
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|