Здравствуйте. Хочу передавать данные из 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; см. ) в папку со скриптом, интерпретатор lua, идущий в комплекте lua for Windows, тоже без проблем интерпретирует этот код. А вот QLUA отказывается с ошибкой:
Код
error loading module 'lzmq' from file 'Z:\lua\lzmq.dll':
Указан недопустимый путь.
Подскажите, пожалуйста, решить данный вопрос.
Пользователь
Сообщений: Регистрация: 30.01.2015
04.09.2016 07:18:07
предположу, что lzmq.dll обращается к какой-то библиотеке и не находит ее. Проверьте зависимости lzmq.dll программой depends
Пользователь
Сообщений: Регистрация: 03.09.2016
04.09.2016 11:55:31
Николай, спасибо за ответ.
К сожалению, depends.exe показывал информацию, вводящую в заблуждение (похоже по описанию: ). Решил способом, который был описан в одном из ответов: запустил ProcessMonitor, посмотрел на неудавшиеся поиски DLL программы info.exe, нашёл нужные библиотеки. Ими оказались libgcc_s_dw2-1.dll и libstdc++-6.dll, которые находились в C:\MinGW\bin. Почему они не находились — большой вопрос, ведь этот путь был в %Path%.
В итоге скрипт заработал (вывел версию в zmq_version.txt), однако завершается он с ошибкой "LuaVM closed with error". Нашёл что-то похожее здесь: Пока в чём ошибка не понял, ещё не ознакомился достаточно глубоко с lua и qlua, но функции, первыми пришедшие в голову: assert и PrintDbgStr выяснить причину не помогли.