函数调用,参数传递,返回值获取
调用并传递普通参数
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)