压栈用lua_pushnumber、lua_pushinteger、lua_pushunsigned、lua_pushlstring、lua_pushstring、lua_pushvfstring、lua_pushfstring、lua_pushcclosure、lua_pushboolean、lua_pushlightuserdata、lua_pushthread等,比如,我们要在lua里注册一个两数相加的函数,需要这样写这个函数: static int my_add(lua_State* L) {...
在Lua中与C语言进行交互通常需要使用Lua的C API。以下是一个简单的示例: 首先在C语言中定义一个函数,该函数将被Lua调用: #include <lua.h> #include <lauxlib.h> #include <lualib.h> int add(lua_State* L) { double a = luaL_checknumber(L, 1); double b = luaL_checknumber(L, 2); lua_pu...
1)在mylib.c中定义给lua调用的C函数,函数原型一般都是 int (lua_State*) 这样的等等,如: staticintc_addsub(lua_State*L){doublea=luaL_checknumber(L,1);// 获取参数1doubleb=luaL_checknumber(L,2);// 获取参数2lua_pushnumber(L,a+b);// 压入返回值1lua_pushnumber(L,a-b);// 压入返回值...
lua_State*L = luaL_newstate();//创建一个状态机luaL_openlibs(L);//打开所有lua标准库intret = luaL_loadfile(L,"c2lua.lua");//加载但不运行lua脚本if(ret !=LUA_OK){constchar*err = lua_tostring(L, -1);//加载失败,会把错误信息压入栈顶printf("---loadfile error = %s\n", err); ...
1、每当Lua调用C函数时,C函数会使用一个局部栈,这个局部栈与之前的栈,以及其它正在调用的C函数使用的栈都是相互独立的。Lua和C就使用这个局部的栈进行数据交互。 2、当Lua调用C时,栈至少包含LUA_MINSTACK(20)个位置,程序员也可以使用lua_checkstack函数来增加栈的大小。
一、Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈。 简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。 在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图: ...
1. Lua API 在Lua中,我们可以通过调用一些API函数来与C语言进行交互。这些API函数提供了一些常用的操作,如创建Lua虚拟机、注册C函数、读写Lua变量、调用Lua函数等等。这些API函数通常位于lua.h头文件里面,是Lua提供给我们与C语言进行交互的接口。 2. 数据类型的转换 Lua与C语言交互时,需要进行数据类型的转换。Lua...
1、交互原理 一个Lua程序与C的交互都是通过Lua虚拟机中的一个堆栈进行的,通过调用Lua C API可以让C中的值入栈再出栈赋值给Lua ,也可以让Lua值入栈再出栈赋给C。 Lua的8种基本类型:nill、boolean、number、string、userdata、function、thread、table, Lua C API 都提供相应的操作接口。
简介:C语言与lua通过json对象交互 C语言调用Lua,传递一个JSON字符串,并将其解析为table,并返回一个JSON串给C语言。 在使用C语言调用Lua的过程中,有时需要向Lua传递一些数据,并从Lua接收返回结果。为了实现这个功能,我们可以借助第三方库,在C语言与Lua之间建立一个桥梁。在本篇文章中,我们将介绍如何在C语言中调用...