远飞闲记

阅读、思考、技术

Lua和C/C++的数据交互

🗓️发布日期:2015-08-23 · 🗺️总字数: 712 字 · ⏱️阅读时间: 2 Minute

近日重新复习了下C\C++和Lua之间的数据交互知识,在这里也做一个简单的记录来作为以后的参考.

Lua栈操作的介绍

Lua是一种嵌入式的脚本语言,不是独立运行的程序它可以通过链接对其他语言进行扩展,或让其他的语言来使用Lua的功能.其中包括使用lua作为库存在于C中或Lua作为主导权C作为一个库来使用.

lua和C语言的交互都是在一个虚拟栈进行的,所有的API操作都是对栈上的数据进行交互.无论是C到Lua的操作还是Lua到C的操作.这里会存在两个问题

  1. 动态类型和静态类型之间的区别,lua是动态性的语言,而C是静态语言
  2. 自动内存管理和手动内存管理的区别.

lua没有采用C语言的联合来解决动态和静态的区别,其原因是不仅为C一门语言设计的保持Lua的宿主可以是任何一门语言。其次Lua是有垃圾回收机制的如果lua table保持在C变量中,Lua引擎则无法搜索出来回收.所以Lua会使用一个抽象的棧来对Lua和C之间的数据交互.

Lua的栈严格按照(LIFO)先出后进的规范来操作栈,栈中任何元素都保存着lua中的任何类型:

  1. 获得lua中的一个值,调用Lua API函数,Lua会将指定的值压入栈,
  2. 要将一个值传给Lua时则先要将这个值压入栈,调用Lua API函数,Lua则会把获取该值并将其从栈中弹出.

压栈操作会把第一个压入的元素索引标记为1,第二个为2,依次推至栈顶,使用负数来访问栈中元素,-1表示栈顶的元素.

相关API

C中调用Lua

比如lua文件中有一个全局变量的table: conf={w=20,h=10}

Lua调用C/C++

注册C/C++函数到Lua中

Lua调用C/C++中的自定义类型

相关资料

使用C++模板来绑定Lua Lua教程:绑定一个简单的C++类(6)

🏷️ Lua C++