[英]passing a lua table from C++ to .Lua script
我花了過去6個小時來解決這個問題! 而且我無法到達任何地方:s
我希望能夠在c ++文件中創建lua表,然后將其傳遞給lua腳本文件,該文件具有以下lua函數:
function MTable (t)
local n=#t
for i=1,n do
print(t[i])
end
end
我動態創建了一個帶有兩個字符串的一維數組:
lua_newtable(L);
lua_pushstring(L,"10.10.1.1");
lua_pushstring(L,"10.10.1.2");
lua_rawseti(L,-3,2);
lua_rawseti(L,-2,1);
所以現在我把桌子放在棧頂了。 我已經通過寫這個來驗證它:if(lua_istable(L,lua_gettop(L)))`返回1,這意味着它是一個表。
然后我這樣做:
lua_getglobal(L, "MTable"); // push the lua function onto the stack
uint32_t result = lua_pcall(L, 1, 0, 0); //argument 1 is for the table
if (result) {
printf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
exit(1);
}
所以我得到了這個錯誤: 無法運行腳本:嘗試調用表值
請注意,該文件還有其他幾個我正在c ++中成功調用的功能。
有人可以幫我解決這個錯誤嗎? 這可以是LUA的錯誤嗎? 我非常正確地遵循了步驟...我猜!
該函數必須先在堆棧上,然后在args之前。
您可以:
在生成表之前將函數推入堆棧,例如:
lua_getglobal(L, "MTable"); ...generate table on stack... int result = lua_pcall(L, 1, 0, 0);
按照您現在執行的順序進行操作,然后在執行pcall之前交換arg和函數:
...generate table on stack... lua_getglobal(L, "MTable"); lua_insert (L, -2); // swap table and function into correct order for pcall int result = lua_pcall(L, 1, 0, 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.