参考文章地址:
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);
运行结果: