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_APIconstchar*(lua_pushfstring) (lua_State *L,constchar*fmt, ...); LUA_APIvoid(lua_pushcclosure) (lua_State *L, lua_CFunction fn,intn); LUA_APIvoid(lua_pushboolean) (lua_State *L,intb); LUA_APIvoid(lua_pushlightuserdata) (lua_State *L,void*p); LUA_APIint(lua_pushthre...
第一种形式是,C/C++作为主程序,调用Lua代码,此时可以将Lua看做“可扩展的语言”,我们将这种应用称为“应用程序代码”。第二种形式是Lua具有控制权,而C/C++代码则作为Lua的“库代码”。在这两种形式中,都是通过Lua提供的C API完成两种语言之间的通信的。 1. 基础知识: C API是一组能使C/C++代码与Lua交互的...
function:C 函数(函数指针)。 最佳实践:使用该函数可以将自定义的 C 函数注册为全局变量,在 Lua 环境中直接调用。 注意事项: 通过lua_register函数将 C 函数注册为全局变量后,可以直接在 Lua 脚本中调用该全局变量,就像调用 Lua 函数一样。 注册的 C 函数必须具有特定的函数签名(lua_CFunction类型),以便与 Lua...
1). 上面的代码是基于我的C++工程,而非C工程,因此包含的头文件是lua.hpp,如果是C工程,可以直接包含lua.h。 2). Lua库中没有定义任何全局变量,而是将所有的状态都保存在动态结构lua_State中,后面所有的C API都需要该指针作为第一个参数。 3). luaL_openlibs函数是用于打开Lua中的所有标准库,如io库、string...
当你只用 C 编写 Lua 的库时,即用一个现成的,考虑完备的宿主程序(比如 Lua 官方的解释器)时,这个问题通常不必考虑。因为你调用 Lua C API 的 C 代码块都是直接或间接被 Lua 调用的。但把 Lua C API 遍布在宿主程序中时却很容易忽视。完善的做法是,你应该把你的业务逻辑写到一个lua_CFunction中,然后用lu...
lua与CAPI概述 1. 栈 1.1 说明 lua与C语言操作都是通过栈来进行的。这个栈是抽象的栈,栈中每一个元素都能保存任何类型的LUA值。 要获得一个lua中的一个值时(例如一个全局变量),只要调用一个Lua的Api函数,Lua就会将指定的值压入栈中。 要将一个值传入Lua时,需要先将这个值压入栈,然后再调用Lua Api,...
lua与CAPI概述 1. 栈 1.1 说明 lua与C语言操作都是通过栈来进行的。这个栈是抽象的栈,栈中每一个元素都能保存任何类型的LUA值。要获得一个lua中的一个值时(例如一个全局变量),只要调用一个Lua的Api函数,Lua就会将指定的值压入栈中。要将一个值传入Lua时,需要先将这个值压入栈,然后再调用Lua Api,Lua...
lua 与 c 语言的交互方式有两种,一种是以 c 语言为主,lua 作为 c 语言调用的一个库,这种方式的 c 代码称为应用程序代码,另一种是以 lua 为主,c 语言作为 lua 调用的一个库,这种方式的 c 代码称为库代码。这两种方式使用同一套 API 来实现,称为 C API。
Lua编程语言与C语言高度相通,同时也与Python有一定的互通性。在这两者之中,Lua与C语言的结合尤为紧密。Lua设计之初即为嵌入到应用程序中提供灵活的扩展和定制功能。因此,它提供了易于与C语言集成的接口,利用这一特性,开发者可以轻松地将Lua作为配置或脚本语言集成进C语言编写的项目中。这种集成不仅仅是在API层面上的...