finsight / QUIKSharp

QUIK# (QUIK Sharp) is the QUIK Lua interface ported to .NET.
Other
232 stars 135 forks source link

Ошибка ACCESS_VIOLATION в QuikSharp.lua #281

Open sel1 opened 3 years ago

sel1 commented 3 years ago

После обновления до QUIK 8.10.1.1 ошибка в QuikSharp.lua: Critical error ACCESS_VIOLATION in script C:\Program Files\QUIK_VTB\lua\QuikSharp.lua В лог ничего не пишется Незадолго до этого было предупреждение о переходе на 19-значные номера заявок и сделок на MOEX https://forum.quik.ru/forum10/topic4909 , возможно с этим как-то связано

2020-11-23 18_36_57

Pr0phet1c commented 3 years ago

19-значные заявки с нами уже давно (относительно). Это точно не при чем. Попробуйте перенести файлы Lua из папки с квиком куда-нибудь отдельно, с гарантированным отсутствием проблем с правами доступа

sel1 commented 3 years ago

Перенес LUA на другой диск, доступ точно есть, ничего не поменялось. При запуске QUIK от имени администратора и последующем запуске скрипта QUIK валится с ошибкой image

Какие еще могут быть варианты?

Pr0phet1c commented 3 years ago

Обратиться в тех.поддержку ВТБ, с вопросом "Почему падает терминал?" Уж эта проблема точно не связана с работой библиотеки

buybackoff commented 3 years ago

Тут https://github.com/finsight/QUIKSharp/blob/158e05d20a939a1c25e28d1eb8afb4454bcfb46b/src/QuikSharp/lua/QuikSharp.lua#L19

8.10 парсится как 8.1 и не те бинарники используются 🤦‍♂️

Pr0phet1c commented 3 years ago

@buybackoff , как думаете, если полученный результат умножать на 100 и сравнивать со значениями 800 и 850, сработает?

buybackoff commented 3 years ago

Да, major * 100 + minor. Только нужно получить две части major/minor отдельно как числа.

On Tue, Dec 1, 2020 at 5:26 PM Prophetic notifications@github.com wrote:

@buybackoff https://github.com/buybackoff , как думаете, если полученный результат умножать на 100 и сравнивать со значениями 800 и 850, сработает?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/finsight/QUIKSharp/issues/281#issuecomment-736662186, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADXS7EMOMMVYON5NIRMUNLSSUKLJANCNFSM4T7QC5PA .

Pr0phet1c commented 3 years ago

Да, major * 100 + minor. Только нужно получить две части major/minor отдельно как числа.

С этим сложнее... С ходу, решение в голову не приходит.

buybackoff commented 3 years ago

Не помню из головы, что возвращает string.split. Мы его много где используем

local major, minor = ... string split by dot ... если tuple local version = major * 100 + minor

или

local split = ... string split by dot ... если table local version = split[1] * 100 + split[2] -- в Луа индексация с 1

On Tue, Dec 1, 2020 at 5:38 PM Prophetic notifications@github.com wrote:

Да, major * 100 + minor. Только нужно получить две части major/minor отдельно как числа.

С этим сложнее... С ходу, решение в голову не приходит.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/finsight/QUIKSharp/issues/281#issuecomment-736669515, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADXS7C6VBDKEIDDMX4QNSTSSULXRANCNFSM4T7QC5PA .

buybackoff commented 3 years ago

Вижу уже есть коммит, но он неправильный. Строка получается "8.10", или 8 целых и 10 сотых, что дает число 8.1 или 810, если умножить на 100.

Pr0phet1c commented 3 years ago

Да, я уже переделал. Возможно, не очень изящно, но работает.

buybackoff commented 3 years ago

Супер! Спасибо!

On Tue, Dec 1, 2020 at 6:48 PM Prophetic notifications@github.com wrote:

Да, я уже переделал. Возможно, не очень изящно, но работает.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/finsight/QUIKSharp/issues/281#issuecomment-736714392, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADXS7CJ2TNC4GGYS5AD3T3SSUT7ZANCNFSM4T7QC5PA .

JaktensTid commented 3 years ago

У кого такая ошибка падает попробуйте после строк

if quikVersion == nil then message("QUIK# cannot detect QUIK version", 3) return else libPath = "\\clibs" end

в QuikSharp.lua засетать quikVersion = 8.5

vsemnado commented 3 years ago

в версии 8.13 такая же беда. Как вариант можно вообще отключить проверку версии, закомментировав строки: -- if quikVersion >= 8.5 then -- libPath = libPath .. "64\\53_"..linkage.."\\" -- elseif quikVersion >= 8 then -- libPath = libPath .. "64\\5.1_"..linkage.."\\" -- else -- libPath = "\\clibs\\5.1_"..linkage.."\\" -- end А оставить только один путь: libPath = libPath .. "64\\53_"..linkage.."\\"

Pr0phet1c commented 3 years ago

Обновитесь. Код в этом файле уже давно другой.

JaktensTid commented 3 years ago

Обновитесь. Код в этом файле уже давно другой.

Странно, я последнюю версию библиотеки себе поставил

Pr0phet1c commented 3 years ago

Обновитесь. Код в этом файле уже давно другой.

Странно, я последнюю версию библиотеки себе поставил

Я не могу знать что и как Вы ставили себе, но я точно знаю, что кусок кода, который был приведен в последнем комменте, устаревший.

Сейчас (в актуальной версии) этот кусок выглядит так:

if quikVersion >= 805 then
    libPath = libPath .. "64\\53_"..linkage.."\\"
elseif quikVersion >= 800 then
    libPath = libPath .. "64\\5.1_"..linkage.."\\"
else
    libPath = "\\clibs\\5.1_"..linkage.."\\"
end
Camill13 commented 3 years ago

Обновитесь. Код в этом файле уже давно другой.

Если папка "LUA" создана актуальным Nuget-пакетом, то там все еще старый код, который сбоит при версиях >= 8.10 Если же брать ту же папку из скомпилированных примеров - то уже исправлено.