C++与Lua通信

参考文章地址:

1.Lua与C++通信原理说明:http://blog.csdn.net/musicvs/article/details/8440707

2.Lua中的堆栈:http://blog.csdn.net/musicvs/article/details/8445027

3.Lua与C++通信Demo:http://blog.csdn.net/musicvs/article/details/8440919


引入lua库头文件

//引入lua库,由于lua是用C语言实现的,所以需要添加extern "C"
EXTERN_C{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}


编写lua脚本

在Resource/script目录下创建一个communication.lua文件,文件内容如下:
data = "this is a string in lua"

C++获取lua中的字符串

	//初始化Lua对象
	lua_State* L = lua_open();

	/***********	获取Lua中的字符串	************/
	//加载并运行lua文件
	luaL_dofile(L,"script/communication.lua");
	//重置栈顶索引为0,相当于清空堆栈,下一个元素入栈时索引位置为-1,再下一个入栈的也是-1,上一个就变成-2了,所谓压栈
	lua_settop(L,0);
	//对lua全局表中的data变量执行入栈操作
	lua_getglobal(L,"data");
	//判断栈顶元素是不是一个字符串,返回非0表示是一个字符串
	int isString = lua_isstring(L,-1);
	//获取栈顶元素并转换为字符串
	const char* data = lua_tostring(L,-1);
	if (isString)
	{
		CCLOG("lua statck index -1 element is string");
	}else{
		CCLOG("lua statck index -1 element is not string");
	}
	CCLOG("lua statck index -1 element value=%s",data);

	//释放内存
	lua_close(L);



运行结果:



posted on 2014-07-10 15:54  linchaolong  阅读(423)  评论(0编辑  收藏  举报

导航