簡體   English   中英

將Lua表從C ++傳遞到.Lua腳本

[英]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之前。

您可以:

  1. 在生成表之前將函數推入堆棧,例如:

     lua_getglobal(L, "MTable"); ...generate table on stack... int result = lua_pcall(L, 1, 0, 0); 
  2. 按照您現在執行的順序進行操作,然后在執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM