Здравствуйте. Хочу передавать данные из QUIK в стороннее приложение через ZeroMQ. Поставил luadist, через него поставил llthreads, lzmq. Данный код работает в интерпретаторе lua, идущим с luadist.
Код
package.cpath = getScriptPath() .. "\\?.dll;".. package.cpath
function main()
zmq = require "lzmq"
f = io.open("zmq_version.txt", "a")
f:write(string.format("%d.%d.%d", zmq.version(true)))
f:close()
end
После копирования нескольких библиотек (в том числе и скомпилированных через luadist llthreads и lzmq, libzmq; см. https://yadi.sk/d/VLB6NFfLuk28b) в папку со скриптом, интерпретатор lua, идущий в комплекте lua for Windows, тоже без проблем интерпретирует этот код. А вот QLUA отказывается с ошибкой:
Код
error loading module 'lzmq' from file 'Z:\lua\lzmq.dll':
Указан недопустимый путь.
К сожалению, depends.exe показывал информацию, вводящую в заблуждение (похоже по описанию: https://stackoverflow.com/questions/17023419/win-7-64-bit-dll-problems). Решил способом, который был описан в одном из ответов: запустил ProcessMonitor, посмотрел на неудавшиеся поиски DLL программы info.exe, нашёл нужные библиотеки. Ими оказались libgcc_s_dw2-1.dll и libstdc++-6.dll, которые находились в C:\MinGW\bin. Почему они не находились — большой вопрос, ведь этот путь был в %Path%.
В итоге скрипт заработал (вывел версию в zmq_version.txt), однако завершается он с ошибкой "LuaVM closed with error". Нашёл что-то похожее здесь: https://forum.quik.ru/forum10/topic523/ Пока в чём ошибка не понял, ещё не ознакомился достаточно глубоко с lua и qlua, но функции, первыми пришедшие в голову: assert и PrintDbgStr выяснить причину не помогли.