Как передать параметр таблицы из lua в C ++ через объект lightuserdata? - PullRequest
0 голосов
/ 24 февраля 2019

Я зарегистрировал функцию, которая создает lightuserdata для использования в C ++ и lua.эта часть работает нормально, когда я тестировал, используя простые переменные, целые и строки.Я могу создавать свои lightuserdata в lua без ошибок, когда это строки и целые числа.однако, когда я пытаюсь использовать таблицы, все становится сложнее

std::string aString = lua_tostring(lua,-4);

первый параметр является правильным, поскольку он должен быть строкой

if (lua_type(lua,-3 == LUA_TTABLE))  //is true so i know it recognizes it as a table
{
    auto t = lua_gettable(lua, -3);

    size_t tableLen = lua_rawlen(lua, -3); // also gives me the correct size
    lua_settop(lua, 1); //this discards the rest right? which i don't want.
    //luaL_checktype(lua, 1, LUA_TTABLE); //using this crashes the application expecting
// table but getting string
    lua_getfield(lua, 1, "a");
    lua_getfield(lua, 1, "b");
    lua_getfield(lua, 1, "c");
    lua_getfield(lua, 1, "d");
    lua_getfield(lua, 1, "e");
    std::cout << lua_gettop(lua) << std::endl; //after using the getfields i get the new table size 
//correctly (i assume, it turns 1 more value than expected, i think it's the table itself.
    //int a = luaL_checkinteger(lua, -5); //these don't work as they expect numbers but get nil
    //int b = luaL_checkinteger(lua, -4);
    //int c = luaL_checkinteger(lua, -3);
    //int d = luaL_checkinteger(lua, -2);
    //int e = luaL_checkinteger(lua, -1);
    std::cout << lua_tointeger(lua, -2) << std::endl; //returns always 0

}

Попытка игнорировать таблицу и получить остальныестека дает мне ошибку нарушения на 0x000000, хотя 3-е значение корректно отлаживается как то, что должно быть, а 4-е пусто, даже если оно проходит правильно, если я не использую таблицу.

- это чтоЯ пытаюсь сделать возможное продолжение, как это?

любой комментарий в правильном направлении будет оценен.Кроме того, что я должен использовать, если я не знаю название ключа в таблице?

1 Ответ

0 голосов
/ 24 февраля 2019

if (lua_type (lua, -3 == LUA_TTABLE)) // истинно, поэтому я знаю, что он распознает его как таблицу

Большая ошибка здесь, или вы этого не сделалиотправьте реальный код.

Вы не проверяете тип значения в индексе -3, вы спрашиваете тип значения в индексе false, поскольку -3 == LUA_TTABLE явно false.

Какой бы сбой не случился после этой «проверки» - это результат этой ошибки.Он будет распознавать в качестве таблицы все, что не является nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...