Получаю таблицу свечей в Lua:
Код |
---|
local my_table_ = CreateDataSource(code_class_, code_paper_, interval)
local size_table = my_table_:Size() //Гарантировано не равно нулю. |
Отправляю в dll в Си:
Код |
---|
Quik_Lua_connector.get_data_frim_Lua(size_table) |
В dll принимаю:
Код |
---|
static int forLua_get_data_frim_Lua(lua_State* L)
{
std::cout << "Size:" << lua_tonumber(L, -1) << std::endl; //Снимаю данные с вершины стека. Все выводится на косноль нормально.
} |
Теперь я хочк передать не отдельный параметр полученной таблицы my_table_, а сразу всю таблицу:
Отправляю в dll в Си:
Код |
---|
Quik_Lua_connector.get_data_frim_Lua(size_table) |
В dll принимаю:
Код |
---|
static int forLua_get_data_frim_Lua(lua_State* L)
{
lua_pushnumber(L, 1); //Добавляю в стек номер индекса переданной таблицы к элементу которой я хочу получить доступ. lua_gettable(L, 1); //Помещает на вершину стека переданной таблицы - расположенная по 1 элементу в стеке, и индексу в самой таблице - по номеру элемента с вершины стека, то есть с номера "1", которая я добавил строчкой выше.
lua_getfield(L, -1, "Size"); //Теперь беру значение из стека с вершины стека, то есть то значние, которое я извлек из таблицы по индексу "1" (грубо говоря первая свеча) и извлекаю из него поле с заданным именем "Size" и значение этого поля помещается на вершину стека.
std::cout << "Size:" << lua_tonumber(L, -1) << std::endl; //Беру значение с вершины стека и получаю дулю с маслом или ошибку "unrecognized exception" в самом квике.
} |
То есть передать обычную таблицу в виде массива из Lua в Си и получить доступ к значнеием - не составляет проблемы, а передача таблицы с ключом и плучение доступа по ключу не работает в Квике.