lua与C交互(5):lua调用C变量

lua代码:

print("print from demo lua.")
-- 访问全局变量
print("name", name)
print("age", age)

print("no", no)
print("room", room)

-- 访问全局表
print("t.len", t.len)
print("t.rock", t.rock)
print("b.beauty", b.beauty)
print("b.bname", b.bname)

CC代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

#include "lua.hpp"

#include "lauxlib.h"
#include "lualib.h"

// lua调用C变量
int main()
{
	lua_State* L = luaL_newstate();  /* create state */
	if (L == NULL) {
		printf("lua state build error.\n");
		return 1;
	}
	luaL_openlibs(L);

	//1. 构建全局变量
	lua_pushstring(L, "dasheng");
	lua_setglobal(L, "name");// 将栈顶的数据出栈到lua全局变量区,并且赋给一个变量名"name"

	lua_pushinteger(L, 19);
	lua_setglobal(L, "age");

	lua_pushinteger(L, 1211031);
	lua_pushstring(L, "qiufeng");
	lua_setglobal(L, "room");
	lua_setglobal(L, "no");

	//2. 构建全局表(方法一)
	lua_pushinteger(L, 999);
	lua_newtable(L); // 新建一个表,并且入栈,因为表在lua虚拟机的栈中,所以表名字是不需要的
	lua_pushstring(L, "len"); //用作表字段
	lua_pushinteger(L, 18); //用作表字段len的值
	lua_pushstring(L, "rock"); //用作表字段rock的值
	lua_pushstring(L, "rock'in rock"); //用作表字段
	//lua_settable从栈顶开始构建表,首先从栈中弹出value,然后再弹出key
	lua_settable(L, 2); //这里第二个参数是表所在的栈下标
	lua_settable(L, 2);
	//lua_settable后,栈只剩下新建的表和栈底的整数999了,所以栈大小是2
	printf("stack size=%d\n", lua_gettop(L));
	lua_setglobal(L, "t"); //给栈顶的内容赋一个变量名,并弹出到lua的全局变量区,这里就是给表一个名字t

    //2. 构建全局表(方法二)
	// 为了减少干扰,首先清空栈
	lua_settop(L, 0);

	lua_newtable(L);
	lua_pushinteger(L, 19);
	lua_pushstring(L, "menglu"); //用作值
	
	lua_setfield(L, 1, "bname"); //第二个参数是表在栈中的下标。这个函数同样在栈顶弹出一个元素,并赋值给变量bname
	lua_setfield(L, 1, "beauty");
	lua_setglobal(L, "b");



	luaL_dofile(L, "demo.lua");

	std::cin.get();
	lua_close(L);

	return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一尺丈量

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值