網上搜索C、C++調用lua函數,有一大堆復制粘貼的。
但是搜索《C調用lua的table里面的函數》 怎么就沒幾個呢?
經過探索,發現其實邏輯是這樣的:
1.根據name獲取table ;並判斷是否為table
2.根據 name2 獲取table的成員變量或方法,並判斷棧頂的是否為函數
3.將函數的參數壓棧,然,沒有可以傳入一個nil;
4.調用lua_pcall 跟調用普通lua函數的方法就一樣了。
代碼如下:
bool call_table_func(const char * table,const char * func,const char *param) { lua_getglobal(L,table); if(lua_istable(L,-1)||lua_type(L,-1)==LUA_TTABLE) { lua_pushstring(L,func); lua_gettable(L,-2); lua_pushstring(L,param); //lua_pushnil(L); if(lua_pcall(L,1,0,0)) { return false; } return true; } return false; }
