MikhaZz (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
QUIK 8.0
 
Еще пожелание
В справке которая идет в комплекте в описании функции PrintDbgStr нет никакой информации о том куда осуществляется вывод, приходится дополнительно искать, хотя будь эта информация в справке, было бы сэкономлено много времени
По хорошему, можно DebugView в папку с Quik положить или хотя бы ссылку на нее в справке
QUIK 8.0
 
Цитата
Anton написал:
Цитата
MikhaZz написал:
Выяснил, что когда собираются модули, то они линкуются к имени библиотеки
 
Цитата
MikhaZz написал:
Для линковки использовал эти библиотеки
На самом деле для линковки сама по себе длл вообще не нужна. Нужна соответствующая .lib, а в ней по сути только имя длл и секция EXPORTS без конкретных адресов. Поэтому у вас прокатывает фокус: линкуете с длл из луа, а в рантайме подгружается длл из квика. Можете сами посмотреть дампбином, адреса функций в них  разные , а оно работает. Но лучше выдрать все же .lib из квиковской длл и линковать с ней.
Да, я понимаю что данные о том куда линковать в .lib содержатся, но не подумал о том чтобы по простому там имя подправить
Я ни где нормальной инструкции не мог найти как заставить это все дело работать, пришлось разбираться
Думаю, там где-то более хитрые зависимости есть, поэтому лучше брать правильные .lib файлы
Самое главное, что меня смутило, это то что пробовал разные готовые сборки под х64, а они все равно не работали!
Вываливалась ошибка "The specified module could not be found."
Потом только дошло что проблема линковки и надо все пересобирать так, чтобы библиотеки модулей были прилинкованы к правильным библиотекам
До кучи в пакетах luarocks уже готовые конфиги, по простому не изменить, из-за этого пришлось тоже повозиться
QUIK 8.0
 
Еще хочу дополнить
Можно взять готовые бинарники и библиотеки отсюда
https://sourceforge.net/projects/luabinaries/files/5.1.5/
1) https://sourceforge.net/projects/luabinaries/files/5.1.5/Tools%20Executables/lua-5.1.5_Win64_bin.zip...
2) https://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Dynamic/lua-5.1.5_Win64...

Дальше все содержимое архивов скидывается в папку luarocks и уже все нормально собирается из командной строки Visual Studio x64
Т.е. можно исключить этап сборки lua из исходников
QUIK 8.0
 
Собрал luasocket и luasec под lua 5.3 x64
Для линковки использовал эти библиотеки
!!! имя библиотеки lua53.dll
https://sourceforge.net/projects/luabinaries/files/5.3.5/Windows%20Libraries/Dynamic/lua-5.3.5_Win64...

Архив со сборкой здесь
https://drive.google.com/file/d/1NiIfSLRcJUV7IdqnZVadtRmD3z2H5Q3Y/view?usp=sharing
QUIK 8.0
 
После многих часов мучений удалось все завести
заработали модули luasocket и luasec
работают https запросы

1) Выяснил, что когда собираются модули, то они линкуются к имени библиотеки, т.е. если собрать с линковкой к библиотеке lua51.dll то модуль не будет работать с библиотекой lua5.1.dll
Это важно при сборке каких-либо пакетов из исходников, необходимо правильно указывать к какой библиотеке линковаться
Quik использует lua5.1.dll, поэтому, там где есть линковка к библиотеке lua, то нужно проверить имя
Если возникает ошибка
The specified module could not be found.
То нужно проверить что тот модуль собран с правильной линковкой

2) Что я сделал:

2.1) Собрал lua из исходников под Visual Studio под x64 по этой инструкции
https://www.youtube.com/watch?v=TALXtup2CjI
Исходники - https://www.lua.org/ftp/lua-5.1.5.tar.gz

2.2) Установил менеджер пакетов luarocks для удобства в будущем
http://luarocks.github.io/luarocks/releases/ отсюда скачал luarocks-3.3.1-win32.zip потому что он содержит все необходимые элементы
устанавливал командой install.bat /L /P <путь куда установить>

2.3) Заменил в luarocks lua5.1.dll, lua5.1.exe и luac5.1.exe собранными в п.1

2.4) Установил OpenSSL версию для разработчиков со всеми библиотеками
https://slproweb.com/products/Win32OpenSSL.html

2.5) Перекинул библиотеки из "C:\OpenSSL-Win64-src\lib\VC"
libcrypto64MD.lib и libssl64MD.lib в папку "C:\OpenSSL-Win64-src\bin"
заменил в именах 64 на 32, это требуется для сборки luasec

2.6) Через командную строку Visual Studio x64 установил пакеты luascoket и luasec
luarocks install luasocket
luarocks install luasec OPENSSL_DIR=C:\OpenSSL-Win64-src

Отдельно собранная библиотека luasocket с lua x64
https://drive.google.com/file/d/1MtCcT_aRByKLiFVHtiemD_KQyqNbeNPp/view?usp=sharing

Библиотеки luasocket и luasec установленные и собранные при помощи luarocks
https://drive.google.com/file/d/1CL_Sz5dMre9ZhDeYp32CFOzX0BnkGWBo/view?usp=sharing

Пример получения данных из blackterminal, если положить библиотеки из архива по ссылке выше в папку со скриптом, то все должно работать
Код
package.cpath = getScriptPath() .. "\\systree\\lib\\lua\\5.1\\?.dll;" .. package.cpath
package.path = getScriptPath() .. "\\systree\\share\\lua\\5.1\\?.lua;" .. package.path
--package.cpath = "C:\\Lua\\luarocks\\systree\\lib\\lua\\5.1\\?.dll;" .. package.cpath
--package.path = "C:\\Lua\\luarocks\\systree\\share\\lua\\5.1\\?.lua;" .. package.path
local https = require("ssl.https")

PrintDbgStr("Start: [" ..  getScriptPath() .. "]")
is_run = false

function OnInit()
    is_run = true
end

function main()
    local request_body = "{\"getemlist\":\"flag\",\"key\":\"TEST\"}"
    local response_body = {}
    local res, code, headers, status = https.request{
        url = "https://blackterminal.ru/api/0.0.8",
        method = "POST",
        headers = 
        {
            ["Content-Type"] = "application/json; charset=utf-8";
            ["Content-Length"] = string.len(request_body);
        },
        source = ltn12.source.string(request_body),
        sink = ltn12.sink.table(response_body),
    }

    PrintDbgStr("res: "..tostring(res))
    PrintDbgStr("code: "..tostring(code))
    PrintDbgStr("headers: "..tostring(headers))
    PrintDbgStr("status: "..tostring(status))
    PrintDbgStr("body: "..tostring(table.concat(response_body)))
end

function OnStop()
    is_run = false
end

function OnClose()
    is_run = false
end

QUIK 8.0
 
Цитата
Nikolay написал:
Если кому еще необходимо.
Я бился над сборкой socket и ssl под x64. Вроде собрал, но как-то нестабильно оно работало. В итоге нашел готовые сборки, более стабильно работающие.
А вот lCurl пока не удалось собрать под x64.

Вот сборки и примеры:
https://github.com/nick-nh/qlua/tree/master/lua_socket_ssl
Пытаюсь подцепить socket к скрипту
устанавливал библиотеку через luarocks, не заработало и ругается на разрядность
Попытался использовать библиотеки по ссылке выше, пишет ошибку
Код
error loading module 'socket.core' from file 'C:\Lua\lua_socket_ssl\clibs_x64\socket\core.dll':
   The specified module could not be found.
Код
error loading module 'socket.core' from file 'C:\Lua\lua_socket_ssl\clibs_x86\socket\core.dll':
   %1 is not a valid Win32 application.
Замучился уже, как сокеты прикрутить к последней версии Quik?
Хочу нормальный обмен данными сделать с внешними приложениями, а тут такая подстава
Можно, конечно, написать библиотеку на С которая будет в свою очередь работать с сокетами и прочим, но надеюсь что обойдется
Страницы: 1
Наверх