lua虚拟栈
lua 和c采用虚拟栈的方式传递数据,栈中的元素是以lua 数据结构的方式存储,c/c++可以从该栈压入数据或者去除数据,通过这种方式实现数据传输,lua中的值由lua来管理,c/c++的值lua不关心,比如c/c++需要一个变量table或者string等,其调用lua提供的接口,由lua产生并且进行内存管理,需要注意的是这里的栈是lua_State的数据栈,其还有调用栈,和Global_State
另外虚拟栈的索引,分为正数索引和负数索引:正数索引是从栈底开始计数,而负数索引是从栈顶开始计数
栈操作api
关于栈的操作
lua_State * luaL_newstate(void);
创建一个新的Lua状态。返回新状态,或者NULL是否存在内存分配错误。
void lua_close(lua_State * L);
销毁lua状态中的所有对象并释放此状态使用的所有动态内存
弹出n个堆栈中的元素 void lua_pop(lua_State * L,int n);
返回堆栈中顶部元素的索引 int lua_gettop(lua_State * L);
C操作栈内数据
常用的入栈函数 lua_push*(lua_State * L, value );
常用的读取栈内内容函数lua_to*(lua_State *L, int index)
判断栈内内容函数 lua_is * (lua_State *L, int index), 如果index所指向的值为给定类型则返回1,否则返回
对于lua中的值
int lua_getglobal(lua_State * L,const char * name

本文详细介绍了Lua与C/C++之间的交互机制,包括lua虚拟栈的使用、栈操作API、C/C++调用lua及lua调用C/C++的方法。通过lua_State管理的数据栈进行数据传输,C/C++通过lua提供的接口进行栈操作。此外,还讨论了lua的全局变量、表操作、自定义数据类型、函数调用以及线程管理。在C/C++调用lua时,可通过luaL_dofile加载并运行脚本,而在lua中调用C/C++函数则可以通过直接编译、静态依赖或动态链接DLL的方式实现。

2006

被折叠的 条评论
为什么被折叠?



