在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
------------------------------------------C API------------------------------------------------ 在C和Lua之间通信关键内容在于一个虚拟的栈。几乎所有的API调用都是对栈上的值进行操作,所有C与Lua之间的数据交换也都通过这个栈来完成。另外,你也可以使用栈来保存临时变量。 Lua库没有定义任何全局变量。它所有的状态保存在动态结构lua_State中,而且指向这个结构的指针作为所有Lua函数的一个参数。 -----运行步骤: 创建一个state并将标准库载入之后,就可以着手解释用户的输入了。对于用户输入的每一行,C程序首先调用luaL_loadbuffer编译这些Lua代码。如果没有错误,这个调用返回零并把编译之后的chunk压入栈。(记住,我们将在下一节中讨论魔法般的栈)之后,C程序调用lua_pcall,它将会把chunk从栈中弹出并在保护模式下运行它。和luaL_laodbuffer一样,lua_pcall在没有错误的情况下返回零。在有错误的情况下,这两个函数都将一条错误消息压入栈;我们可以用lua_tostring来得到这条信息、输出它,用lua_pop将它从栈中删除。 -----堆栈:关于栈的操作请参见Programing in Lua一书中的186页的一个函数 查询元素,tonumber,tostring之类的 堆栈的操作,gettop返回堆栈元素个数,也是栈顶元素的索引!settop设置栈顶(堆栈中元素个数)为一个指定的值!如果开始的栈顶高于指定的栈顶,顶部的值将会被丢弃!settop(L,0)清空堆栈! LUA中使用更多的使用对栈的操作来实现数据的交互!提供了一些对栈操作的API标准,在UniLua中,依照标准实现了这些函数,名字都只是小改动了一些,毕竟C#跟C语法规则还是不同!在对堆栈的操作中,是用索引来进行定位的,正数索引自底向上取值,负数索引自顶向下取值(以正负1开始)!在其中settop函数中使用了索引0用来清空堆栈 -----------------------------------------扩展你的程序---------------------------------------------- 打开包并加载函数库,加载文件中的信息块 (参见188页 ) 引入table的概念
-------------------------------------The Registry-------------------------------------------------- registry实现了全局的值,upvalue机制实现了与C static等价的东西
LUA常规:
创建-加载函数库-加载具体脚本- |
请发表评论