Lua(二): Lua与C交互 长阳山人 软件工程师,FPGA工程师,弦歌Linux维护者,老庄忠实粉本章我们用最简单粗暴的方法,用C写2个底层机制函数,然后在lua脚本里调用。 如果看Lua的Reference Manual, 你会一头雾水。不同的版本有不同的函数接口。我们说的最简单粗暴的机制,就是找到lua的main函数,直接在里面注册2个用C...
lua 是一种嵌入语言,并不能独立运行,而是一个可以链接到其它应用程序的库。lua 是使用 c 语言开发的,因此它与 c 语言的交互非常简单,但 lua 作为一门十分流行的脚本语言,不仅能嵌入到语言中,还能嵌入到 java,c# 等其它语言中。lua 与 c 语言的交互方式有两种,一种是以 c 语言为主,lua 作为 c 语言调用的...
C和Lua的交互部分称为C API,C API是一个C代码和Lua代码进行交互的函数集,主要由以下部分组成: 1、读取Lua全局变量的函数; 2、调用Lua函数的函数; 3、运行Lua代码片段的函数; 4、注册C函数然后可以在Lua中被调用的函数; C语言和Lua之间的数据通信交换,是通过在C和Lua之间建立一个虚拟的栈,几乎所有的API调用...
1. lua中类型在c中如何表示 要实现c和lua之间的交互,先了解下lua中基本类型与c中类型怎么对应的。lua中有八种基本类型:nil、boolean、number、string、table、function、userdata、thread,其中,userdata分轻量用户数据(lightuserdata)和完成用户数据(userdata)两种。这些类型都可以压入栈中,在c中统一用TValue结构表示,...
1.3 Lua与C是如何进行交互 虚拟机内部与外部的C程序发生数据交换主要是通过一个公用栈实现的,也就是说Lua虚拟机和C程序公用一个栈,双方都可以压栈或读取数据。一方压入,另一方弹出就能实现数据的交换。 在lua中,lua堆栈就是一个struct,堆栈索引方式可能是正数也可能是负数,区别是:正数索引1永远表示栈底,负数索引...
lua之所以能够与上层语言交互,主要是用lua的虚拟栈进行了数据交互。机制上基本等同C/C++的栈,实质是一个struct,在非常重要的luaL_newstate函数调用时创建,满足先进后出。但其索引方式可以从1到n,也可以有-1到-n,正1永远表示栈底,负1永远表示栈顶,如下图所示。 当C/C++想调用lua中一个值时,lua将数值压入lua...
C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1、 读写Lua全局变量的函数; 2、 调用Lua函数的函数; 3、 运行Lua代码片段的函数; 4、 注册C函数后可以在Lua中被调用的函数; 在C和LUA之间交互的关键在于一个虚拟栈(virtual stack),数据交互通过栈进行。操作数据时,首先将数据拷贝到栈上,然后...
1、交互原理 一个Lua程序与C的交互都是通过Lua虚拟机中的一个堆栈进行的,通过调用Lua C API可以让C中的值入栈再出栈赋值给Lua ,也可以让Lua值入栈再出栈赋给C。 Lua的8种基本类型:nill、boolean、number、string、userdata、function、thread、table, Lua C API 都提供相应的操作接口。
Lua与C的交互依靠虚拟栈进行 Lua用C写的,使用C++的时候用这个: extern "C" { #include "lua.h" } 所有luaL_开头的函数都是辅助库里的函数,定义在lauxlib.h,所有lua_开头的函数 都定义在lua.h 数据压栈的C函数: void lua_pushnil (lua_State *L); void lua_pushboolean (lua_State *L, int bool);...
功能同lua_pcall,但是不是在保护模式下运行,它会直接抛出错误而不是错误代码。 字符串操作: const char *lua_pushlstring (lua_State *L, const char *s, size_t len); 把指针 s 指向的长度为 len 的字符串压栈, Lua 对这个字符串做一个内部副本(或是复用一个副本),这个函数可以用来把字符串的一部分...