一些LUA_API 分析 lua_getglobal lua_pushstring lua_tostring lua_register 参考 引言 Lua 作为用标准 C 语言编写的脚本语言,其优势之一在于可以很方便的与 C 进行交互(因为可以在 C 里直接调用 Lua 的相关函数)。下面就简单聊聊 Lua 和 C 的交互。 交互基础 分析之前,我们先来想一想不同语言之间交互需要...
int lua_checkstack(lua_State *L, int sz):检查栈空间。默认有20个空闲的记录,lua.h中的LUA_MINSTACK宏定义了这个常量。 int lua_is... (lua_State *L, int index):检查一个元素能否被转换成指定的类型。 int lua_type (lua_State *L, int idx):返回栈中元素的类型; const char* lua_typename(l...
Lua 使用一个虚拟栈来和 C 传递值。栈上的的每个元素都是一个 Lua 值(nil,数字,字符串,等等)。 无论何时 Lua 调用 C,被调用的函数都得到一个新的栈,这个栈独立于 C 函数本身的堆栈,也独立于以前的栈。(在 C 函数里,用 Lua API 不能访问到 Lua 状态机中本次调用之外的堆栈中的数据),它里面包含了 ...
Lua和C的交互 特别注意的是: 1、每当Lua调用C函数时,C函数会使用一个局部栈,这个局部栈与之前的栈,以及其它正在调用的C函数使用的栈都是相互独立的。Lua和C就使用这个局部的栈进行数据交互。 2、当Lua调用C时,栈至少包含LUA_MINSTACK(20)个位置,程序员也可以使用lua_checkstack函数来增加栈的大小。 3、使用...
Lua和C/C++语言交互的主要方法是一个无处不在的虚拟栈,栈的特点是先进后出. 在Lua中,Lua堆栈就是一个struct 堆栈索引的方式可是是正数也可以是负数 正数索引1永远表示栈底,负数索引-1永远表示栈顶 全局表 Lua的全局表可以想象成一个map哈希表结构,比如Lua有一个变量: ...
Lua与C的交互依靠虚拟栈进行 Lua用C写的,使用C++的时候用这个: extern "C" { #include "lua.h" } 所有luaL_开头的函数都是辅助库里的函数,定义在lauxlib.h,所有lua_开头的函数 都定义在lua.h 数据压栈的C函数: void lua_pushnil (lua_State *L); void lua_pushboolean (lua_State *L, int bool);...
Lua和C交互的最大特色就是使用一个虚拟的栈来实现,虚拟的栈上可以是任意类型的值,包括nil,number,string,userdata等. Lua内部所有的值类型都是用TValue这种结构来实现的,TValue包括Value和_tt,_tt标识Value的类型,Value是一个Union,可以表示不同类型的值,userdate和string是*gc表示,lightuserdata是*p表示. ...
这篇文章,属于Lua和C++交互的子篇章。 Lua调用C++类注册生成的Lua模块 ①新建创建对象函数,调用lua_newuserdata,创建一个对象指针,指向new出来的新的对象。 ②新建成员方法,调用lua_touserdata,得到从lua中传入的对象指针,调用成员方法。 ③调用luaL_newlib,将需要封装的C++函数放入到一个lua表中压入栈里。
栈的使用解决了C和Lua之间两个不协调的问题:第一,Lua会自动进行垃圾收集,而C要求显式的分配存储单元,两者引起的矛盾。第二,Lua中的动态类型和C中的静态类型不一致引起的混乱。 Q:虚拟栈索引? A:正索引的顺序为元素入栈的先后顺序,栈中的第一个元素(也就是第一个被入栈的元素)索引为1,第二个元素索引为2...
网上很多介绍c和lua交互的,但是在linux下面的编译介绍却没找到,在此自己记录下,也方便大家查看 在lua模块安装完成后,可以用命令find / -name ‘lua.h’ 查看lua.h的位置,网上很多人是用–profix指定位置,在此我都是默认安装,发现默认其实已经是在/usr/local/bin 等系统目录下,没有其他配置,可直接使用,很方便...