Lua C++编程 之 Lua调用c++

函数调用,参数传递,返回值获取

调用并传递普通参数


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)

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

大纲

Share the Post:
滚动至顶部