1

Тема: хуки на функции lua

вот у меня "со звёздочкой" вопрос. есть lua-скрипт, в котором кто-то объявил колбэк, например, onStop. и, предположим, у меня есть dll, которая тоже хочет получать эту нотификацию onStop. но, если я определю ее в dll, то одна из этих функций не будет вызываться. я хочу проксировать этот вызов в lua-скрипт таким образом, чтобы работали оба вызова (в тексте и в библиотеке) и в тексте не нужно было ничего дополнительно писать. чтобы все это работало прозрачно, без дополнительных костылей в тексте lua-скрипта. спасибо.

2

Re: хуки на функции lua

сам нашел, все предельно просто: https://stackoverflow.com/questions/562 … -lua-c-api

3 (2019-11-06 15:12:47 отредактировано swerg)

Re: хуки на функции lua

Идея примерно понятна, но быть может вы могли бы привести кусочек рабочего кода из Dll для описанного вами случая?
Спасибо.

4

Re: хуки на функции lua

я сделал это проксирование, как хотел изначально, но понял, что занимаюсь фигней, и правильный вариант такой:

my = require "my_lib"

OnConnected = my.OnConnected
OnDisconnected = my.OnDisconnected

exitflag = false

function main()
    while not exitflag do
      sleep(100)
    end
end

function OnStop()
    message("OnStop()", 1)
    my.OnStop()
    exitflag = true
end

5

Re: хуки на функции lua

дело еще в том, что квик, похоже, индексы некоторых функций запоминает после загрузки скрипта. то есть, переопределить OnParam какой-нибудь в процессе работы не получится (а OnConnected, например, - сколько угодно). еще есть вариант - через отладчик, но стоит ли эффект затраченных сил?

6

Re: хуки на функции lua

Уважаемый toxa, приветствую!
Подскажите, в ваших загашниках не завалялся хук на событие мыши?
В арке просил сделать OnMause() и как бы, им то и не сложно транслировать из своего обработчика события мне в скрипт. Но че-то тишина, может не умеют?
Конкретно интересует понимание, что нажата левая кнопка мыши.
Хочу использовать для меток, когда их смещаешь на графике, то координаты метки меняются в процессе этого движения, что не очень хорошо, т.к. интересна конечная точка движения метки. Заранее благодарен.

7 (2019-11-06 18:58:59 отредактировано toxa)

Re: хуки на функции lua

kalikazandr, вы что ли стоп-заявки хотите на графике мышкой перетаскивать? вообще ваш вопрос не очень подходит именно к этой обсуждаемой тут теме. типа надо "OnLabelDragStart" и "OnLabelDragDrop"? в загашнике такого у меня нет, но можно подумать как сделать. Создайте тему - обсудим.

8

Re: хуки на функции lua

toxa пишет:

kalikazandr, вы что ли стоп-заявки хотите на графике мышкой перетаскивать? вообще ваш вопрос не очень подходит именно к этой обсуждаемой тут теме. типа надо "OnLabelDragStart" и "OnLabelDragDrop"? в загашнике такого у меня нет, но можно подумать как сделать. Создайте тему - обсудим.

Нет, не к стопам, в моих ботах нет стопов. Но использовать можно, да. Ну и "OnLabelDragStart" и "OnLabelDragDrop" по сути не нужны, это не долго и так на луа сваять.
Создал топик https://quik2dde.ru/viewtopic.php?pid=2481#p2481

9 (2019-11-07 08:17:55 отредактировано swerg)

Re: хуки на функции lua

toxa пишет:

дело еще в том, что квик, похоже, индексы некоторых функций запоминает после загрузки скрипта. то есть, переопределить OnParam какой-нибудь в процессе работы не получится

Это да, это понятно как. и там суть не в "индексах", а в том, что после "исполнения" тела всего скрипта (когда выполняется часть кода вне функций) дополнительно в глобальной области Lua размещает определяемые в скрипте функции, а QLua находит среди них известные ей и проставляет для себя признак: "о, такой обработчик есть, его будем вызывать, а такого нет - его вызывать не будем". Даже если какой-то обработчик появится позже.

toxa пишет:

(а OnConnected, например, - сколько угодно)

А вот это я не понял. Можно тут поподробнее с примером - о чем речь?

10 (2019-11-07 17:20:45 отредактировано toxa)

Re: хуки на функции lua

ocAc = 0
ocBc = 0
opAc = 0
opBc = 0

function ocA()
    ocAc = ocAc + 1
    OnConnected = ocB
end
function ocB()
    ocBc = ocBc + 1
    OnConnected = ocA
end

function opA(a, b)
    opAc = opAc + 1
    OnParam = opB
end
function opB(a, b)
    opBc = opBc + 1
    OnParam = opA
end

OnConnected = ocA
OnParam = opA

exitflag = false

function main()
    while not exitflag do
      sleep(100)
    end
    message('OnConnectA: '..tostring(acAc)..' OnConnectB: '..tostring(acBc), 1)
    message('OnParamA: '..tostring(opAc)..' OnParamB: '..tostring(opBc), 1)
end

function OnStop()
    exitflag = true
end

11

Re: хуки на функции lua

я был не прав, видимо, где-то в коде своем налажал, ну не важно, моего основного вывода это не отменяет, хуки на callback-функции квика со стороны dll не нужны.