2010-10-21 4 views
5

Я создал таблицу Lua в C, но я не уверен, как нажимать эту таблицу на верхнюю часть стека, чтобы я мог передать ее функции Lua.Нажатие таблицы 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 ] 

ответ

7

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

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); 
+0

Как бы я подталкивал две разные таблицы к одной и той же функции? –

+0

Второй аргумент в lua_pcall - это количество аргументов, передаваемых функции, поэтому вы должны нажимать обе таблицы в стек, а затем менять pcall на lua_pcall (L, 2, 0, 0); –

1

В таблице уже в стеке, где lua_newtable оставил его, не так ли?

+0

Если это так, я должен сделать таблицу неправильно. Не могли бы вы рассказать мне, как я должен создавать таблицу? Все, что нужно содержать, это некоторые строки. –

+1

См. Http://www.lua.org/source/5.1/lua.c.html#getargs, например. Или покажите нам свой код. – lhf

1

Я сделал небольшой фрагмент кода с открытым исходным кодом, который решает подталкивать простые словарные таблицы Lua от C до Lua.

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

Смежные вопросы