Тема: Вызов функций Lua из С/С++
Подскажите пожалуйста, возможно ли вызывать функции Lua из C++ ?
Ну к примеру вызвать CreateDataSource() ?
И передать данные ?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Написание внешних библиотек на C++/Delphi/C# для Lua → Вызов функций Lua из С/С++
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите пожалуйста, возможно ли вызывать функции Lua из C++ ?
Ну к примеру вызвать CreateDataSource() ?
И передать данные ?
Для CreateDataSource() будет примерно такой код (не проверял!):
/*
Из справки:
TABLE data_source, STRING error_desc CreateDataSource (STRING class_code, STRING sec_code, NUMBER interval, [, STRING param])
*/
lua_getglobal(L, "CreateDataSource"); /* получить функцию, которую будем вызывать */
lua_pushstring(L, "TQBR"); /* положить на стек первый аргумент - код класса */
lua_pushstring(L, "LKOH"); /* положить на стек второй аргумент - код инструмента */
lua_pushnumber(L, 1); /* положить на стек третий аргумент - интервал */
lua_pushstring(L, "BID"); /* положить на стек четвертый аргумент - код параметра */
/* вызываем функцию (4 аргумента, 2 результата) */
if (lua_pcall(L, 4, 2, 0) != 0)
{
error(L, "error running function `f': %s", lua_tostring(L, -1));
// либо здесь return с признаком ошибки
}
/* выполнено успешно, считываем результаты */
..........
/* удаляем из стека два значения-результата */
lua_pop(L, 2);
Вместо многоточия надо вставить код вычитывания элементов таблицы из возвращенного результата.
Я не готов по памяти написать код чтения таблицы Lua на С++, нагуглите примеры.
Спасибо!
Для CreateDataSource() будет примерно такой код (не проверял!):
/* Из справки: TABLE data_source, STRING error_desc CreateDataSource (STRING class_code, STRING sec_code, NUMBER interval, [, STRING param]) */ lua_getglobal(L, "CreateDataSource"); /* получить функцию, которую будем вызывать */ lua_pushstring(L, "TQBR"); /* положить на стек первый аргумент - код класса */ lua_pushstring(L, "LKOH"); /* положить на стек второй аргумент - код инструмента */ lua_pushnumber(L, 1); /* положить на стек третий аргумент - интервал */ lua_pushstring(L, "BID"); /* положить на стек четвертый аргумент - код параметра */ /* вызываем функцию (4 аргумента, 2 результата) */ if (lua_pcall(L, 4, 2, 0) != 0) { error(L, "error running function `f': %s", lua_tostring(L, -1)); // либо здесь return с признаком ошибки } /* выполнено успешно, считываем результаты */ .......... /* удаляем из стека два значения-результата */ lua_pop(L, 2);
Вместо многоточия надо вставить код вычитывания элементов таблицы из возвращенного результата.
Я не готов по памяти написать код чтения таблицы Lua на С++, нагуглите примеры.
Это код кстати не рабочий: ошибка вызова lua_pcall:
error in error handling
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
QUIK -> DDE → Написание внешних библиотек на C++/Delphi/C# для Lua → Вызов функций Lua из С/С++
Форум работает на PunBB, при поддержке Informer Technologies, Inc