1 (2022-09-28 14:57:49 отредактировано Serg_)

Тема: Вызов функций Lua из С/С++

Подскажите пожалуйста, возможно ли вызывать функции Lua из C++ ?

Ну к примеру вызвать CreateDataSource() ?
И передать данные ?

2

Re: Вызов функций Lua из С/С++

[url]https://www.lua.org/pil/25.2.html[/url]

3 (2022-09-28 16:17:29 отредактировано swerg)

Re: Вызов функций 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 на С++, нагуглите примеры.

4

Re: Вызов функций Lua из С/С++

Спасибо!

5 (2022-10-03 16:24:27 отредактировано Serg_)

Re: Вызов функций Lua из С/С++

swerg пишет:

Для 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