Подскажите, есть к примеру callback`и - OnQuote, OnAllTrade - которые вызываются самим Квиком.
Я пытаюсь их объявить Lua C api:
Код
static int global_callback__OnQuote(lua_State* L)
{
std::cout << "global_callback__OnQuote" << std::endl;
return 0;
}
int main()
{
lua_pushcfunction(L, global_callback__OnQuote); //Помещаю Си-шную функцию в стек.
lua_setglobal(L, "OnQuote"); //Присваиваю ей глобальное имя.
}
Вроде бы должно работать, но функция не вызывается. Получение стаканов предварительно естественно заказана, да и в самом квике открыты, да и обычный Lua-скрипт с OnQuote - тоже работает. Но из dll-ки не хочет почему то.
Quikos написал: Оказывается в самом Lua-Скрипте нужно еще прописать вызов OnQuote.
Не нужно. В скрипте только подключение dll.
Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
Чтобы было проще программировать колбеки, Вы можете эти функции написать на луа, а внутри их вызвать ваши функции на СИ. ------------------- например так function OnQuote() --------------- вызываете что хотите писанное на СИ ..... -------------- end ================= На самом деле Вы так сейчас и делаете, так как QLUA - библиотека функций, писанных на СИ. Вы хотите написать еще и свою хотелку на CИ.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Проблема в том что Вы неправильно ее описываете в dll. Ваша DLL - это таблица которая размещается в глобальном стеке, а колбек - это функция которая размещается в глобальном стеке Когда Вы присвоите функции вашу функцию тогда и вызывается.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Проблема в том что Вы неправильно ее описываете в dll. Ваша DLL - это таблица которая размещается в глобальном стеке, а колбек - это функция которая размещается в глобальном стеке Когда Вы присвоите функции вашу функцию тогда и вызывается.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Проблема в том что Вы неправильно ее описываете в dll. Ваша DLL - это таблица которая размещается в глобальном стеке, а колбек - это функция которая размещается в глобальном стеке Когда Вы присвоите функции вашу функцию тогда и вызывается.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Проблема в том что Вы неправильно ее описываете в dll. Ваша DLL - это таблица которая размещается в глобальном стеке, а колбек - это функция которая размещается в глобальном стеке Когда Вы присвоите функции вашу функцию тогда и вызывается.
Просто вы же сами написали, что я неправильно описываю ее в dll, да и BVladimir , что вроде бы может работать без указания этих двух строчек в скрипте.
Собсвенно работает и хорошо, но теперь мне все таки интересно - может ли это работать без указания OnQuote в скрипте или нет.
Так Вы просто сделали функцию OnQuote но ваша dll вообще здесь не причем. -------------------------- Вы dll сделали правильно (если выкинуть лишнее, из того что Вам написали) Но Вы не объявили Вашу функцию колбеком. -----------------------
Как вариант,вы можете вызвать вашу функцию внутри например так:
Код
--здесь загрузите вашу dll
function OnQuote (class, sec)
---- здесь вызов вашей функции из вашей dll
end
nikolz написал: Так Вы просто сделали функцию OnQuote но ваша dll вообще здесь не причем. -------------------------- Вы dll сделали правильно (если выкинуть лишнее, из того что Вам написали) Но Вы не объявили Вашу функцию колбеком. -----------------------
Как вариант,вы можете вызвать вашу функцию внутри например так:
Код
--здесь загрузите вашу dll
function OnQuote (class, sec)
---- здесь вызов вашей функции из вашей dll
end
Не понимаю, что значит я просто обьявил функцию, но не сделал ее колбеком ? Я обявил Сишную функцию и связал ее с именем реальной глобальной квиковской функции - OnQuote.
Что значит не сделал ее колбеком ? И что такое " ---- здесь вызов вашей функции из вашей dll". Функция OnQuote вызывается не мной - а самим Квиком.
nikolz написал: Так Вы просто сделали функцию OnQuote но ваша dll вообще здесь не причем. -------------------------- Вы dll сделали правильно (если выкинуть лишнее, из того что Вам написали) Но Вы не объявили Вашу функцию колбеком. -----------------------
Как вариант,вы можете вызвать вашу функцию внутри например так:
Код
--здесь загрузите вашу dll
function OnQuote (class, sec)
---- здесь вызов вашей функции из вашей dll
end
Не понимаю, что значит я просто обьявил функцию, но не сделал ее колбеком ? Я обявил Сишную функцию и связал ее с именем реальной глобальной квиковской функции - OnQuote.
Что значит не сделал ее колбеком ? И что такое " ---- здесь вызов вашей функции из вашей dll". Функция OnQuote вызывается не мной - а самим Квиком.
покажите где КВИК в скрипте, который написали Вы, загрузил вашу dll
nikolz написал: покажите где КВИК в скрипте, который написали Вы, загрузил вашу dll
Вот полный скрипт в Квике:
Код
function OnQuote(class, sec)
end
function main()
Quik_Lua_connector = require("Quik_Lua_connector ")
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end -- end main()