Передача таблицы с ключем из Lua в Си

Страницы: 1
RSS
Передача таблицы с ключем из Lua в Си
 
Получаю таблицу свечей в 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 в Си и получить доступ к значнеием - не составляет проблемы, а передача таблицы с ключом и плучение доступа по ключу не работает в Квике.
 
Пробую так:

Код
    int size_stack = lua_gettop(L);
    std::cout << size_stack << std::endl;         //Размер стека 1

    lua_pushstring(L, "Size");

    size_stack = lua_gettop(L);
    std::cout << size_stack << std::endl;         //Размер стека 2

    lua_gettable(L, -2);                          //lua_gettable - помешает на вершину стека значение Таблицы, которая расположена первый элементом в стеке по ключу расположенному на вершине стека, то есть по ключу "Size"

    size_stack = lua_gettop(L);
    std::cout << size_stack << std::endl;        //Размер стека 2, то есть  lua_gettable - доабвила значение по ключу Size за место доавленной выше строки "Size"

    std::cout << "Size_number:" << lua_tonumber(L, -1) << std::endl;      //Извлекаю значение с вершин стека, НО оно равно НУЛЮ!!! ХОТЯ таблица переданная из Lua в Си - гарантировано имеет размер
 
Это гарантировано должно работать, НО не работает.
 

Делаю так:

Код
lua_getfield(L, -1, "Size");  //Извлекаю ключ Size из таблицы и помещаю на вершину стека

//Проверяю, что на вершине стека:

    int status_lua_isC_function = lua_iscfunction(L, -1);
    std::cout << "status_lua_isC_function:" << status_lua_isC_function << std::endl;  //return 1


    int status_lua_is_function = lua_isfunction(L, -1);
    std::cout << "status_lua_is_function:" << status_lua_is_function << std::endl;     //return 1

//return 1 - означает на вершине стека - функция - видимо извлеченная функция Size.

    lua_pushvalue(L, -2); // Создаю копию таблицы и помещаю ее на вершину стека после функции Size.

    int status_lua_pcall = lua_pcall(L, 1, 1, 0); // Вызываю функцию Size с аргументом в виде таблицы и одним возвращаемым значением

    if (status_lua_pcall == LUA_ERRERR)
    {
        std::cout << "LUA_ERRERR" << std::endl;
    }

lua_pcall - всегда завершается ошибкой LUA_ERRERR - ошибка во время выполнения обработчика ошибок.

Страницы: 1
Читают тему
Наверх