Intereting Posts
Утечки памяти и ошибки seg при использовании OpenMP и OpenSSL неограниченный буфер printf – отформатированный перенос непосредственно в stream Предотrotation переполнения буфера с помощью gets Разница между двумя датами в C CMake make : *** Нет правила, чтобы сделать цель `/path/to/uthash/utarray.h ‘, которая нужна« HelloTest ». Стоп Переменные среды переполнения буфера Linux почему ptrdiff_t возвращает цифру разности чисел с i-j, если i> j и возвращает большое несвязанное число, если i <j В C, как сортировать массив указателей, где каждый указатель указывает на массив переменной длины int? предупреждение: fopen () call Резервный код при жесткой обработке ошибок процессора ARM Cortex-M Поддерживает ли OpenCL случайный глобальный буфер очереди? Почему этот C scanf автоматически пропускается? Обработка массива символов как целого числа – Learn C the Hard Way Дополнительный кредит Получение статуса выхода из функции, зарегистрированной в atexit () Почему не следует передавать `char **` функции, которая принимает `const char **` в C?

Нажатие таблицы Lua

Я создал таблицу Lua в C , но я не уверен, как подтолкнуть эту таблицу к вершине стека, чтобы передать ее функции Lua.

Кто-нибудь знает как это сделать?

Это мой текущий код:

lua_createtable(state, libraries.size(), 0); int table_index = lua_gettop(state); for (int i = 0; i < libraries.size(); i++) { lua_pushstring(state, libraries[i].c_str()); lua_rawseti(state, table_index, i + 1); } lua_settable(state, -3); [ Push other things ] [ Call function ] 

Вот быстрая вспомогательная функция для нажатия строк на стол

 void l_pushtablestring(lua_State* L , char* key , char* value) { lua_pushstring(L, key); lua_pushstring(L, value); lua_settable(L, -3); } 

Здесь я использую вспомогательную функцию для создания таблицы и передачи ее функции

 // create a lua function luaL_loadstring(L, "function fullName(t) print(t.fname,t.lname) end"); lua_pcall(L, 0, 0, 0); // push the function to the stack lua_getglobal(L, "fullName"); // create a table in c (it will be at the top of the stack) lua_newtable(L); l_pushtablestring(L, "fname", "john"); l_pushtablestring(L, "lname", "stewart"); // call the function with one argument lua_pcall(L, 1, 0, 0); 

Стол уже находится в стеке, где lua_newtable оставил его, не так ли?

Я сделал небольшой fragment open source, который разрешает толковать простые словарные таблицы Lua от C до Lua.

Вы можете проверить это здесь , должно хорошо работать.