Еще пожелание В справке которая идет в комплекте в описании функции PrintDbgStr нет никакой информации о том куда осуществляется вывод, приходится дополнительно искать, хотя будь эта информация в справке, было бы сэкономлено много времени По хорошему, можно DebugView в папку с Quik положить или хотя бы ссылку на нее в справке
написал: Выяснил, что когда собираются модули, то они линкуются к имени библиотеки
Цитата
написал: Для линковки использовал эти библиотеки
На самом деле для линковки сама по себе длл вообще не нужна. Нужна соответствующая .lib, а в ней по сути только имя длл и секция EXPORTS без конкретных адресов. Поэтому у вас прокатывает фокус: линкуете с длл из луа, а в рантайме подгружается длл из квика. Можете сами посмотреть дампбином, адреса функций в них разные , а оно работает. Но лучше выдрать все же .lib из квиковской длл и линковать с ней.
Да, я понимаю что данные о том куда линковать в .lib содержатся, но не подумал о том чтобы по простому там имя подправить Я ни где нормальной инструкции не мог найти как заставить это все дело работать, пришлось разбираться Думаю, там где-то более хитрые зависимости есть, поэтому лучше брать правильные .lib файлы Самое главное, что меня смутило, это то что пробовал разные готовые сборки под х64, а они все равно не работали! Вываливалась ошибка "The specified module could not be found." Потом только дошло что проблема линковки и надо все пересобирать так, чтобы библиотеки модулей были прилинкованы к правильным библиотекам До кучи в пакетах luarocks уже готовые конфиги, по простому не изменить, из-за этого пришлось тоже повозиться
QUIK 8.0
Пользователь
Сообщений: Регистрация: 24.03.2020
25.03.2020 09:24:57
Еще хочу дополнить Можно взять готовые бинарники и библиотеки отсюда
1) 2)
Дальше все содержимое архивов скидывается в папку luarocks и уже все нормально собирается из командной строки Visual Studio x64 Т.е. можно исключить этап сборки lua из исходников
QUIK 8.0
Пользователь
Сообщений: Регистрация: 24.03.2020
25.03.2020 08:45:38
Собрал luasocket и luasec под lua 5.3 x64 Для линковки использовал эти библиотеки !!! имя библиотеки lua53.dll
Архив со сборкой здесь
QUIK 8.0
Пользователь
Сообщений: Регистрация: 24.03.2020
25.03.2020 07:55:22
После многих часов мучений удалось все завести заработали модули 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 по этой инструкции
Исходники -
2.2) Установил менеджер пакетов luarocks для удобства в будущем отсюда скачал потому что он содержит все необходимые элементы устанавливал командой install.bat /L /P <путь куда установить>
2.3) Заменил в luarocks lua5.1.dll, lua5.1.exe и luac5.1.exe собранными в п.1
2.4) Установил OpenSSL версию для разработчиков со всеми библиотеками
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
Библиотеки luasocket и luasec установленные и собранные при помощи luarocks
Пример получения данных из 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
Пользователь
Сообщений: Регистрация: 24.03.2020
24.03.2020 18:55:09
Цитата
Nikolay написал: Если кому еще необходимо. Я бился над сборкой socket и ssl под x64. Вроде собрал, но как-то нестабильно оно работало. В итоге нашел готовые сборки, более стабильно работающие. А вот lCurl пока не удалось собрать под x64.
Вот сборки и примеры:
Пытаюсь подцепить 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? Хочу нормальный обмен данными сделать с внешними приложениями, а тут такая подстава Можно, конечно, написать библиотеку на С которая будет в свою очередь работать с сокетами и прочим, но надеюсь что обойдется