• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua C API

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
Lua语言是如何与Lua C语言通信的?
        lua利用虚拟栈与C进行数据交换。在栈中的每个元素都表示一个值(nil, string, number etc)
        利用栈进行数据交换,数据采用先进后出原则。
        Lua 的每个元素有两种序号进行编号。

        

Lua如何操作堆栈的
往栈里压值

void lua_pushboolean (lua_State *L, int b);         将Bool值压入栈
void lua_pushnumber (lua_State *L, lua_Number n); 将数值压入栈
void lua_pushstring (lua_State *L, const char *s);         将字符串压入栈

查询栈中的元素
int lua_type (lua_State *L, int index);                 返回 index 索引元素的类型

类型为以下:LUA_TNIL, LUA_TNUMBER, LUA_TBOOLEAN, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA, LUA_TTHREAD, and LUA_TLIGHTUSERDATA, LUA_TNONE

int lua_isboolean (lua_State *L, int index);
int lua_iscfunction (lua_State *L, int index);
int lua_isfunction (lua_State *L, int index);
int lua_islightuserdata (lua_State *L, int index);
int lua_isnil (lua_State *L, int index);
int lua_isnone (lua_State *L, int index);
int lua_isnoneornil (lua_State *L, int index);
int lua_isnumber (lua_State *L, int index);
int lua_isstring (lua_State *L, int index);
int lua_istable (lua_State *L, int index);
int lua_isthread (lua_State *L, int index);
int lua_isuserdata (lua_State *L, int index);
返回值:是返回1,不是返回0.

获取栈内给定位置的元素值
int lua_toboolean (lua_State *L, int index);
lua_CFunction lua_tocfunction (lua_State *L, int index);
lua_Integer lua_tointeger (lua_State *L, int index);
const char *lua_tolstring (lua_State *L, int index, size_t *len);
lua_Number lua_tonumber (lua_State *L, int index);
const void *lua_topointer (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);
lua_State *lua_tothread (lua_State *L, int index);
void *lua_touserdata (lua_State *L, int index);

设置栈顶
void lua_settop (lua_State *L, int index); 设置index索引为栈顶,index之上的元素都被清除
void lua_pushvalue (lua_State *L, int index); 将index索引的数据压入栈顶,index索引数据保留,即有两份数据

移除栈顶元素
void lua_remove (lua_State *L, int index);  删除 index 的元素,index之上的编号往下移动

向栈中插入元素
void lua_insert (lua_State *L, int index); 将栈顶出栈,插入指定 index 索引位置,之前的索引值依次向上移动。
void lua_replace (lua_State *L, int index); 将栈顶出栈,替换掉index索引位置的数据

Lua 编译为字节码
int luaL_dofile (lua_State *L, 
const char *filename -- lua字节码文件,生成一个函数,并用字节码设置函数,最后将函数入栈
-- lua源文件,编译为字节码,并用字节码设置函数,最后将函数入栈
  );
int luaL_loadbuffer (lua_State *L,
                     const char *buff,    -- 将字符串的内容作为源代码进行编译,编译之后也会生成一个函数,并用字节码设置函数,最后将函数入栈
                     size_t sz, -- 长度
                     const char *name -- 
);

Lua执行字节码
如果异常就会抛出异常,退出整个程序
void lua_call (lua_State *L, 
int nargs, -- 参数个数
int nresults  -- 返回值的个数
); -- 调用之前需要将函数入栈,接着参数入栈,然后出栈,再将函数的返回值入栈

如果异常就会抛出异常,不会退出程序

int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);

调用方法:
luaL_dofile ...

lua_call ...







鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap