Компиляция скрипта QLua(Lua)

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 4, среднее: 5,00 из 5)
Загрузка...

Qlua-основыЧтобы скомпилировать(получить байт-код) Ваш скрипт, Вам понадобится файл luac.exe, находится в корневом каталоге Вашей LuaForWindows, если у Вас ее еще нет, то установите отсюда code.google.com
Затем, положите в папку с Вашим скриптом копию файла luac.exe, создайте в этой папке текстовый файл, добавьте в него строчку:
luac.exe -o MyScript.luac MyScript.lua
"MyScript" замените на имя Вашего скрипта и сохраните этот файл под любым названием, главное с расширением .bat
Теперь выполните этот файл и в папке появится еще один файл с расширением .luac, перекиньте его куда-нибудь, поменяйте его расширение на .lua и запускайте в терминале как обычный скрипт.

Тот же результат можно получить программным путем:

1
2
3
local f = io.open(FilePathLuac, 'wb')        -- FilePathLuac по этому пути будет создан скомпилированный файл, например: "C:\\MyScript.lua"
f:write(string.dump(loadfile(FilePathSrc)))  -- FilePathSrc путь к Вашему исходному файлу .lua
f:close()

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Компиляция скрипта QLua(Lua): 44 комментария

  1. Здравствуйте. Чтобы можно было в скомпилированном файле исходные данные поправить, можно как-нибудь сделать, чтобы часть кода компилятор оставил в читабельном виде? Спасибо.

    1. Здравствуйте.
      Настраиваемые руками параметры храните в текстовом файле, а в скрипте сделайте кнопку, для обновления параметров из файла.

  2. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
     function body()
    local ServerTime = getInfoParam("ServerTime")
    if(ServerTime==nil or ServerTime=="") then
    Problem = "Error!"
    end
    SetCell(TableID,1,2,ServerTime)
    SetCell(TableID,1,3,Problem)
    sleep(1000)
    end
     
     
    function PutDataToTableInit()
    SetWindowPos(TableID,100,200,500,300)
    SetWindowCaption(TableID,"Робот")
    ---------------------------------------------
    InsertRow(TableID,-1)
    end

    Всем здравия! Разбираюсь с азами. Выводит пустую таблицу без заглавия и серверного времени. Что не так делаю? Спасибо

  3. Вечер добрый, Дмитрий!

    Существует ли механизм перезапуска скрипта QLUA внешними средствами?
    Задача такая: есть ini-файл параметров скрипта, редактируемый программой C#. После изменения некоторых из них нужно перезапустить скрипт в QUIK без перегрузки терминала. Возможно ли?

    1. Привет! Ну раз все молчат, тогда такой вариант.
      1. Из C# настройки кидаете еще в один файл tools_2.ini, в конце этого файла делаете завершающую строку, например: "конец файла"
      2. Делаете луа- бота, обзываете, например read.lua, который sleep(1) пытается открыть файл tools_2.ini, в случае успеха и проверки на "конец файла".
      2.1 read-бот удаляет последнюю строку и тут же передает новые настройки рабочему луа-боту через это чудо от тохи: https://quik2dde.ru/viewtopic.php?pid=2525#p2525, а конкретно вам нужно пространство имен "queues":

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
       --read-бот
      local sh = require "lua_share"
      local ns = sh.GetNameSpace("queues")
      function main()
        while is_run do
          local tools = read(path.."\\tools_2.ini")
          if tools then
            ns.tools = tools --отправил настройки
            os.remove(path.."\\tools_2.ini")
          end
          sleep(1)
        end
      end

      3. В рабочем луа-боте делаете эвент, который опрашивает "queues" и заменяет текущие настройки при их получении:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
       --рабочий-бот
      local sh = require "lua_share"
      local ns = sh.GetNameSpace("queues")
      function event_tools()
        repeat
          local t = ns.tools
          if t then
             tools = t
          end
        until not t or not is_run
      end
      function main()
        while is_run do
          event_tools()
          --торговый алгоритм
          sleep(1)
        end
      end
      1. Спасибо, коллега!
        Пока все молчали, решил задачу способом, аналогичным описанному Вами. )))
        Однако ж, Ваш вариант положу в свою копилку знаний.

        По поводу чуда коллеги toxa я ему отписался с просьбой пояснить, каким образом нужно сконструировать "слушателя" - клиента. Всё-таки опыта у меня немного, и с трудом понимаю некоторые "изыски" ЛУА. Он пока мне не ответил. Видимо, вопрос мой его поставил в тупик своей неграмотностью.)))

        (ответил сразу же, как только пришло извещение об ответе. Тормозной какой-то бот.)

  4. Ребят, подскажите, у меня скрипт использует подключение других файлов с моими функциями через require. Если я скомпилирую свой main lua, то все функции будут в скомпилированном файлике и он будет самодостаточен?

      1. 1
        2
        
        function OnInit() -- Функция вызывается терминалом QUIK перед вызовом функции main()
           Name = debug.getinfo(1,"S").source:match(".+\\(.+)\.lua") -- Прочитал свое название

        В нормальном виде все читает, после шифровки эта строка не работает, есть альтернатива?

        1. Слушай, даже не помню, давно с подобным вопросом сталкивался, попробуй поковыряться с тем, что возвращается, возможно расположение относительное смещается после компиляции:

          1
          2
          3
          4
          5
          
          function OnInit() -- Функция вызывается терминалом QUIK перед вызовом функции main()
             for key,value in pairs(debug.getinfo(1,"S")) do
                message(key..':'..tostring(value))
             end
          end

          Возможно еще через командную строку os.execute() получится выудить название файла, тут о командах: http://ab57.ru/cmdlist.html

          1. Попробовал первый способ - все равно если переименовать скомпилированный скрипт, то он почему то все равно первоначальное имя видит, 2й способ - сложновато для меня. Как вариант - переименовать шифрованный скрипт, потом при первом запуске в меню забить новое название и тогда уже в порядке все будет - только вот это лишние хлопоты, да и забудешь вписать новое имя все неприятности обеспеченны.

              1. не подходит. Для чего нужно - у меня бот например называется "Схема" - значит таблица его будет называться Схема, комментарий в заявках сделках транзакциях - Схема, файл состояния самое важное Схема - настроил я его на 60 000 страйк ну он себе там и торгует ни кого не трогает, решил я что пора бы и на 61 000 по торговать - копирую бота Схема - обзываю его 61 000 - все работает то т же алгоритм ни кого не трогает но на другом страйке.

      1. Вроде всю последовательность действий выполнила,скачала LuaForWindows_v5.1.4-46,установила, положила в папку со скриптом копию файла luac.exe, создала в этой папке текстовый файл, добавила в него строчку:luac.exe -o MyScript.luac MyScript.lua,заменила на имя моего скрипта и сохранила с расширением .bat.Кликнула по этому файлу два раза,но файл с расширением luac не появляется.Может я что то не так делаю?

              1. Получилось скомпилировать по первому варианту.Изменила название скрипта,убрала в нем цифры,оставила одно слово в названии, и скрипт в таком варианте скомпилировался. Файл с расширением bat можно удалить после получения скомпилированного файла?

          1. Добрый день. Я правильно понимаю, что если нескомпилированный файл просто запускать из квика, то код будет просто работать, а чего в нем понаписано никто не узнает?