lua 和 c 的交互都是通过一个神奇的栈,首先,lua 与 c 交互需要解决两个问题 第一,c 语言是静态数据类型,lua 语言是动态数据类型 第二,c 语言没有自动内存回收机制,而 lua 语言有内存回收机制 为了解决这两个问题,lua 使用了一个栈,无论是 c 语言把参数传给 lua 还是从 lua 获取参数,都先把参数压入到...
码农帮:编译android的C版本Lua库 码农帮:编译iOS的C版本Lua库 码农帮:Lua与C在Android上的互调 码农帮:Lua与C在iOS上的互调 在本文中,我们将重点探讨如何将Lua运行环境(Lua虚拟机)嵌入到android应用程序中,并实现Lua与C互调,实现android app的热更新能力。本文涉及技术点,在demo中均实现,下载地址在此文后面,欢迎...
1. 常见Lua相关的C API 压入元素 // cpp void lua_pushnil(lua_State *L); void lua_pushboolean(lua_State *L, int bool); void lua_pushnumber(lua_State *L, lua_Number n); void lua_pushinteger(lua_State *L, lua_Integer n); void lua_pushlstring(lua_State *L, const char* s, size...
{LUA_TABLIBNAME, luaopen_table}, {LUA_IOLIBNAME, luaopen_io}, {LUA_RTCLIBNAME, luaopen_rtc}, // {LUA_OSLIBNAME, luaopen_os}, {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, {LUA_UTF8LIBNAME, luaopen_utf8}, // {LUA_DBLIBNAME, luaopen_debug}, #if defined...
C和Lua是可以相互调用的。第一种情况是,C语言拥有控制权,Lua是一个库,这种形式中的C代码称为“应用程序代码”;第二种情况是,Lua拥有控制权,C语言是一个库,这个时候C代码就是“库代码”。“应用程序代码”和“库代码”都使用同样的API来与Lua通信,这些API就称为C API。
(3) 这个函数里面可以使用lua_tostring类函数来获取函数的参数 (4) 如果有返回值,通过lua_pushnumber这个函数来返回。 回到顶部(go to top) 3.例子 View Code 这段代码把字符串中的key=value字符串全部转换成XML格式<key>value</key>,在这个例子中,C++程序通过调用lua_pushstring把C字符串压入栈顶,lua_set...
Lua使用upvalue机制实现了局部静态变量和C闭包的效果: function F1(n) local function F2() print(n) end return F2 end g=F1(5) g() 这个是Lua代码,结果是5,这里要注意一件事,按道理说g=F1(5)之后n应该已经结束它的使命了,然而再次执行g()也就是F2发现输出是5,这说明n并没有在F1执行完成后被销毁,...
这里给出lua_CFunction的类型: typedef int (*lua_CFunction) (lua_State *L); 可以看到它是一个函数指针,可以用于参数是lua_State*而返回值是int的函数。 显然,我们压入栈的C函数的参数和返回值类型是严格受限的。 void lua_setglobal (lua_State *L, const char *name); 从栈顶弹出值,并将其设为Lu...
Lua_State: 一个Lua_State管理着Lua虚拟机的一个执行环境,拥有独立的数据栈和调用栈,表示一个Lua程序的执行状态。 Lua虚拟栈:lua虚拟机中的用来实现lua与C交互的栈,栈都是先进后出的,我们对栈的操作都是基于栈顶的,也就是说如果要获取到栈底元素,需要将其上面的依次弹出。虚拟栈的索引方式有两种,正索引和负...
【详谈Lua与C】Lua语言是一种嵌入式语言,它本身的威力有限;当Lua遇见了C,那它就展示了它的强大威力。C和Lua是可以相互调用的。第一种情况,C语言拥有控制权,这种形式中的C代码称为“应用程序代码”;第二种情况,Lua拥有控制权,C语言是一个库,这个时候C代码就是“库代码”。O网页链接 k...