10

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 ]
4

3 に答える 3

10

文字列をテーブルにプッシュするためのクイックヘルパー関数は次のとおりです

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);
于 2010-10-21T14:13:34.097 に答える
2

テーブルはすでにスタックにあり、lua_newtable残っているところですよね?

于 2010-10-21T13:30:25.060 に答える
1

単純なLuaディクショナリテーブルをCからLuaにプッシュすることを解決する小さなスニペットオープンソースを作成しました。

あなたはここでそれをチェックすることができます、うまくいくはずです。

于 2012-07-22T03:46:39.980 に答える