Тема: Lua и С++, ошибка
Здравствуйте!
Внутри подключаемой из Lua dll есть вот такая функция на C:
static int forLua_OnQuote(lua_State *L)
{
    const char *argClass = NULL;
        size_t argClassLen = 0;
    const char *argSec = NULL;  
        size_t argSecLen = 0;
    
    argClass = luaL_checklstring(L, 1, &argClassLen);
    argSec = luaL_checklstring(L, 2, &argSecLen);
    stack ss;
    if( strcmp(argClass,"SPBFUT")==0 && strcmp(argSec,"RIM4")==0)
    {
        lua_settop(L,0);
        lua_getfield (L, LUA_GLOBALSINDEX, "getQuoteLevel2");
        lua_pushstring (L, argClass);
                lua_pushstring (L, argSec);
        int r = lua_pcall (L, 2 /* num args */, 1 /* num res */, 0);
                if (r==0)
                {
                                //успешный вызов, в стеке таблица
                    size_t argLeng = 0; 
                byte cc=0;
                lua_pushnil(L);
                while (lua_next(L, -2) != 0)
                {
                    std::string k1 = luaL_checklstring(L, -2, &argLeng); // здесь лежит ключ (bid_count, offer_count, bid, offer)
                    switch (cc) {
                    case 0: ss.bid_count   = atoi( ((std::string)luaL_checklstring(L, -1, &argLeng)).c_str() ); break;
                    case 1: ss.offer_count = atoi( ((std::string)luaL_checklstring(L, -1, &argLeng)).c_str() ); break;
                    case 2: // здесь идет обработка вложенной таблицы bid
                            lua_pushnil(L);
                            while (lua_next(L, -2) != 0) //!!!!!!! при второй итерации здесь возникает ошибка:
                            {                            //!!!!!!! lua invalid key to 'next' 
                                 
                                 std::string k2 = luaL_checklstring(L, -2, &argLeng); // здесь лежит ключ, по -1 лежит значение
                                 lua_pop(L, 1);
                            }
                            lua_pop(L, 1);
                            break;
                    case 3: // здесь должна быть обработка вложенной таблицы offer
                            break;
                    }
                    lua_pop(L, 1);
                    cc++;
                }
                lua_pop(L, 1);
        }
        else
        {
            //какая-то ошибка при вызове getQuoteLevel2
            MsgToQuik(L, (char *)lua_tostring (L, -1));
        }
    }
    return(1);
}В Lua она регистрируется как коллбэк OnQuote. При попытке пройтись по массиву bid на второй итерации возникает ошибка(lua invalid key to 'next'), хотя первую пару ключ/значение цикл видит верно. Ключ: "1", значение: "таблица". Если погрузиться ниже, в bid[1], то видит оба ключа и оба значения. Если не погружаться во вложенные таблицы, а пройтись только по первой, в которой всего 4 значения, то тоже все хорошо. В чем я тут неправ, откуда ошибка? Подскажите пожалуйста.

