Lua与C++交互--lua c api用法--02

1 引入lua 中头文件

extern “C”
{

#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

}
2 lua中常用的API

1 lua 与 C++交互主要是通过lua中的虚拟栈来实现

2 当c想要获取lua中的数据,需要在lua中将数据加入栈中,c通过栈来获取值

入栈函数

void lua_pushnil(Lua_State L);
void lua_pushboolean(Lua_State L,int bool);
void lua_pushnumber(Lua_State L,double n);
void lua_pushstring(Lua_State
L,const char
s);
void lua_pushuserdata(Lua_State
L,void*p);
从栈取值

bool lua_toboolean(Lua_StateL,int idx);
int lua_tonumber(Lua_State
L,int idx);
const char* lua_tostring(Lua_StateL,int idx,size_t len);
void
lua_touserdata(Lua_State
L,int idx);
检测指定类型

int lua_gettop(luaState *L);
void lua_settop(luaState *L,int idx);
void lua_pushvalue(luaState *L,int idx);
void lua_remove(luaState *L,int idx);
void lua_insert(luaState *L,int idx);
void lua_replace(luaState *L,int idx);
当C和Lua互相调用的时候,Lua虚拟栈严格的按照LIFO规则操作,只会改变栈顶部分。但通过Lua的API,可以查询栈上的任何元素,甚至是在任何一个位置插入和删除元素。

需要注意堆栈的顺序

3 创建lua状态机和打开相关库

lua_State *L = luaL_newstate();//创建lua状态机
luaopen_base(L);//打开基础库
luaL_openlibs(L);//打开高级库如IO,string,math,table
lua_close(L);//关闭状态机
4 向状态机中压入数据和读取数据

lua_pushstring(L,“i am test lua && lua”);
lua_pushnumber(L,19);
if (lua_isstring(L, 1))
{
cout << lua_tostring(L,1)<<endl;
}
if (lua_isnumber(L, 2))
{
cout << lua_tonumber(L,2)<<endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_36285892/article/details/83716738