函数调用,参数传递,返回值获取
调用并传递普通参数
extern C { #include lua.h #include lualib.h #include lauxlib.h } int CTest_1(lua_State* L) { printf(init CTest\n); size_t len; const char* name = lua_tolstring(L, -1, &len); printf(pass %s\n,name); return 0; } int main() { lua_State* L = lua_open(); luaopen_base(L); luaopen_string(L); luaopen_table(L); lua_register(L, CTest_1, CTest_1); luaL_dofile(L, test.lua); return 0; } --lua CTest_1(咔咔咔)
调用并传递普通数组
int CTestArr(lua_State* L) { printf(in CTestArr\n); int len = luaL_getn(L, -1); for (int i = 1;i <= len;i++) { lua_pushnumber(L, i); lua_gettable(L, -2); //pop 上面插入的索引, push table[i] size_t len; printf(%s\n, lua_tolstring(L, -1, &len)); lua_pop(L, 1); } return 0; } --lua local arr = {A001,A002,A003} CTestArr(arr)
调用传递数组后,用lua_next遍历
int CTestArr_2(lua_State* L) { printf("in CTestArr_2\n"); lua_pushnil(L); /* first key */ while (lua_next(L, -2) != 0) { size_t len; printf("%.0f - % s\n", lua_tonumber(L, -2), lua_tolstring(L, -1, &len) ); lua_pop(L, 1); } return 0; } --lua local arr = {"A001","A002","A003"} CTestArr_2(arr)
调用并返回普通类型
int CTestRe(lua_State* L) { lua_pushstring(L, "lzx no1"); return 1; } --lua local a = CTestRe() print(b)
调用并返回数组类型
int CTestRe2(lua_State* L) { //lua_pushstring(L, "lzx no1"); lua_newtable(L); lua_pushstring(L, "name"); lua_pushstring(L, "my name is lzx"); lua_settable(L, -3); lua_pushstring(L, "age"); lua_pushnumber(L, 21); lua_settable(L, -3); return 1; } --lua local b = CTestRe2() print(b.name..b.age)