首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LuaC如何交互(二)

上一篇文章描述了LuaC交互原理, 这篇文章主要通过Demo程序加深LuaC交互....涉及到交互,分为: Lua中如何调用C函数 C中如何调用Lua函数 这里先描述C中如何调用Lua函数, 想象一下, C到底怎么Lua进行通信,如何告诉它我调用是xxx参数?...Lua采取是利用栈进行交互 Lua提供了C API对栈进行操作, 利用各种Lua_pushXXX将不同值压入栈中,然后调用Lua脚本时自然会退栈取出参数运行 Lua栈状态需要自己进行维护,若发生多线程同时对.../* 出栈,将给定索引处Lua值转换为C字符串 */ printf("str = %s\n",str); } lua_getglobal(L,”str”) 执行两步操作 首先将str放入栈中...然后由Lua去全局表中匹配str值,并将str值返回栈顶 luaL_dofile(L,”helloscript.lua”); 它是这样子定义: #define luaL_dofile(L

1.2K10

LuaC如何交互(一)

要理解LuaC交互,先要理解堆栈全局表两个概念 堆栈 LuaC/C++语言交互主要方法是一个无处不在虚拟栈,栈特点是先进后出. ?...: name = “hello world” 全局表中存放了namehello world对应关系, 可以通过name在全局表中找到对应hello world 交互方式 hello.lua...C/C++想要获取Luaname字符串值, 首先把name放到堆栈(栈顶),方便Lua看到; Lua从堆栈(栈顶)获取到name值, 此时栈顶变为空; Lua去全局表中查找name对应字符串;...全局表返回对应字符串hello world; Lua再次把hello world放到堆栈(栈顶); C/C++从堆栈(栈顶)获取name值. ?...**注意:**为了更好展示原理,文中图片来自于网络上博客中图片. 参考 Lua篇(第01章):让LuaC++牵手 Lua初学者(四)–Lua调用原理展示(lua堆栈)

1.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

Linux下lua安装以及c交互

lua安装,与c交互过程记录 lua安装 在此我机器环境是cenos 6.8 我安装lua5.1.4版本 安装lua编译相关依赖 yum -y install readline-devel...,开始c语言交互之旅行吧 网上很多介绍clua交互,但是在linux下面的编译介绍却没找到,在此自己记录下,也方便大家查看 在lua模块安装完成后,可以用命令find / -name ‘lua.h...1实现自己第一个c调用C例子 test.lua print("lua script test.lua have been load--") function showinfo() print...gcc test.c -o test -llua -lm -ldl 2实现自己第一个lua调用C例子 c_lua.c #include #include...建立lua所有变量(包括函数)全局表 lua_getglobal(L,"lua2c_add");// 在lua全局表查找lua2c_add函数,并压入栈底 lua_pushinteger

74920

lua c调用

lua中使用c动态库,像luacjson(支持unicode),luasocket,都是以动态链接库形式在lua中使用,至于怎么写这些动态链接库很少有教程说到,下面我就说说如何把c文件编译成动态库。...首先,假设需要在lua中调用一个在c中实现求和函数,函数名add(a,b)。 我给这个测试库取名为dylib,它包含一个函数add。...lua中这样使用: local dylib = require "dylib.test" local c = dylib.add(1,2) print(c) 上面的dylib.test就是我编译生成dylib...int c = a+b; lua_pop(L,2); lua_pushnumber(L,c); return 1; } 这函数就是把两参数加起来,然后返回。...对于一个Lua文件来说,我们可以很轻易改掉它名称,但是对于一个C程序库来说,我们是没有办法编辑其中luaopen_函数名称

60420

C语言调用lua

C语言是一种非常流行编程语言,而Lua是一种基于C语言开发脚本语言。相信大家都知道,Lua可以使用C语言来扩展其功能,进而实现更复杂功能。...C语言调用luajit 在使用C语言调用luajit之前,我们需要先了解一些必要概念。首先,我们需要掌握一些基本lua函数调用方法。...同时,我们也需要掌握luaL_openlibs函数,它可以打开Lua标准库,以便我们可以在C语言中使用Lua函数。 当我们了解了这些基本概念之后,我们就可以开始编写C语言调用luajit代码了。...字符串。 C语言向Lua传递参数 当我们需要将C语言中参数传递给Lua脚本时,我们可以使用lua_push*函数系列将其压入到栈中。这个函数系列包括了很多不同函数,用于不同类型参数。...C语言传递结构体参数 当我们需要将一个结构体参数传递给Lua脚本时,我们需要先了解一些序列化反序列化知识。在C语言中,我们可以将结构体序列化为一个二进制数据流,然后将其作为字符串传递给Lua脚本。

19620

lua调用C函数

Lua采取是利用栈进行交互,利用各种Lua_pushXXX将不同值压入栈中,然后调用Lua脚本时自然会退栈取出参数运行,对于Lua虚拟机来说,就像是发生了一次正常函数调用。...(这里采用栈是Lua栈,因为若是C栈的话调用LuaC API就会出错了。)...需要注意是,Lua栈状态需要自己进行维护,若发生多线程同时对Lua栈操作,没有加锁保护的话会导致栈状态混乱然后出很诡异bug 摘自  多语言协作与二进制交互 函数接口 typedef...struct lua_State lua_State; lua虚拟机(或叫解释器),可以理解为一个thread,一个完整Lua虚拟环境执行状态。...typedef int (*lua_CFunction) (lua_State *L); 能够被Lua调用C函数都必须是这种规则。函数返回int值表示C函数返回值个数。

2.8K31

C语言调用Lua函数

现在工作了,大量零碎时间用于上微博,知乎,QQ。这些碎片化阅读让人读起来轻松,也能获取些粗浅信息。 然而它们是消耗时间黑洞,时间就这样一分一秒地飞逝,年末时候,知乎会告诉你回答了多少问题。...期待让你眼前一亮信息。结果往往是趁兴而去,败兴而回。屏幕上信息永无止境界滚动着,是如此热闹,仿佛每一个人都在狂欢,而我内心却如此空虚与孤独。 在lua API中。...调用一个函数步骤非常easy: 1.压入你要调用函数,使用lua_getglobal。 2.压入调用參数。 3.使用lua_pcall 4.从栈中弹出结果。...我们就能够定义个c函数来封装这个调用: /* call a function ‘f’ defined in Lua */ double f (double x, double y)..., -1); lua_pop(L, 1); return z; } lua_pcall在压入结果之前,会将函数,參数弹出,假设返回多个结果,第一个最先压入。

2.4K20

LuaLuajit

CAPI来使用 三、不足不同 1)lua没有强大库,所以很多功能实现起来没有python、perl、ruby等脚本语言简洁 2)lua异常处理功能饱受争议,虽然其提供了pcallxpcall...++中应用广泛a++a+=1等操作 8)lua索引是从1开始,而不是我们熟悉0(string,table) 9)当你给一个元素赋值为nil时相当于这个元素不存在 10)lua数值类型只有...number是没有int,float,double等之分 11)lua中没有类概念,其类是通过table形式来实现 12)lua中只有nilfalse是表示假,零在lua中是为真的 13...另外,原生lua、luajitjit模式(pc安卓可用)、luajitinterpreter模式(ios下只能运行这个),他们执行lua原理是有很大不同,也导致一些lua优化技巧并不见得是通用...因此luajit在拥有这些信息之后就可以生成机器码,跟c编译器一样做到无缝调用,而不需要像标准luac交互那样需要调用pushint等等函数来传参了。

1.2K10

【IOS开发高级系列】Lua与OC交互专题

1 Lua语法 Lua教程 http://www.yiibai.com/lua/lua_environment.html 2 Lua与OC交互 2.1 Lua与OC交互原理 用Lua编写iOS程序 http...这意味着,你可以从Lua里面,使用任何全部Objective-C类及框架。         从技术上来讲,Wax结合了Objective-C原生C代码。...许多"大而全"语言不一样,网路通讯、图形界面等都没有默认提供。但是Lua可以很容易地被扩展:由宿主语言(通常是CC++)提供这些功能,Lua可以使用它们,就像是本来就内置功能一样。...(468K)下载次数:236 3 参考链接 objective-cLua交互(一)  http://www.cocoachina.com/bbs/read.php?.../details/43269693 objective-cLua交互(二) http://blog.csdn.net/wildfireli/article/details/12277549 Wax

24320

Lua连续教程之Lua线程状态

像信号量监视器这样同步机制一般都是操作系统上下文提供,而非应用程序提供。要查找纠正多线程相关bug是很困难,其中有些Bug还会导致安全隐患。...)); -- thread 除主线程以外,线程其他Lua对象一样都是垃圾回收对象。...一个协程也可以调用C语言函数,而C语言函数又可以反过来调用其他Lua函数。我们已经讨论过如何使用延续来让这些Lua函数交出控制权。C语言函数也可以交出控制权。...例如,给定两个状态L1L2,如下命令会将L1栈顶字符串压入L2栈中: lua_pushstring(L2,lua_tostring(L1,-1)); 由于所有数据必须由C语言进行传递,因此Lua..., *next; }Proc; 前两个字段表示进程使用Lua状态运行该进程C线程。

2.7K20

【Unity游戏开发】浅谈LuaC#中闭包

一、前言   目前在Unity游戏开发中,比较流行两种语言就是LuaC#。通常做法是:C#做些核心功能接口供Lua调用,Lua主要做些UI模块一些业务逻辑。...那么,马三今天就要和大家来谈谈LuaC#中闭包,下面首先让我们先来谈谈Lua闭包。...而对于传统C++开发者或者C#开发者来说,闭包这个词或多或少都会有些玄之又玄感觉。那么,在开讲之前,让我们先来了解几个Lua中基础知识概念,这样有助于我们理解Lua闭包。...其实我们可以把Lua闭包C++中类做一下类比。闭包是数据行为结合体,这就好比C++中类,有一些成员变量(Luaupvalue)+成员方法(Lua内嵌函数)。...四、总结   无论是在Javascript、Lua还是C#开发中,闭包使用相当广泛,也正是由于闭包各种语法糖存在,才使得我们代码更加简洁,使用更方便。

2.3K31

FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

Lua尽管小巧,却支持比较先进编程范式,lua匿名函数闭包会让代码写起来更加 优雅高效,如果某人使用C++ 编译器还比较老套,不支持C++11,那么可以尽快感受一下lua匿名函数闭包。...扩展LUA: 这也是非常重要操作,嵌入lua总是扩展lua相伴相行。lua若要操作C++中对象或函数,那么必须先把C++对应接口注册都lua中。...高级特性: 通过以上介绍,也许你已经了解了FFLUA设计原则,即:当在编写C++代码时,希望使用LUA就像使用C++本地代码一样,而在lua中操作C++数据接口时候,又希望C++用起来完全跟...这样可以大大减轻程序开发工作,从而把精力更多放大设计逻辑上。那么做到如何lua才算像C++,C++做到如何才算像lua呢?...重要类型检查有: STL转成Luatable时,STL中类型必须是lua支持,包括基本类型已经注册过C++对象指针。

2.3K70

Lua日期时间

Lua语言标准库提供了两个用于操作日期时间函数,这两个函数在C语言标准库中也存在,提供是同样功能。虽然这两个函数看上去很简单,但依旧可以基于这些简单功能完成很多复杂工作。...Lua语言针对日期时间使用两种表示方式。第1中表示方式是一个数字,这个数字通常是一个整型数。尽管并非IOS C所必需,但在大多数系统中这个数字时自一个被称为纪元固定日期后至今秒数。...特别地,在POSIXWindows系统中国这个固定日期均是Jan 01,1970,0:00 UTC。 Lua语言针对日期时间提供第2中表示方式是一个表。...具体精度与平台相关,在POSIX系统中通常是1毫秒。 @[toc] Lua语言标准库提供了两个用于操作日期时间函数,这两个函数在C语言标准库中也存在,提供是同样功能。...Lua语言针对日期时间提供第2中表示方式是一个表。

2.7K40

Lua中调用C语言

我们说用Lua可以调用C语言函数,但这并不意味着Lua可以调用所有的C函数。当C语言调用Lua函数时,该函数必须遵循一个简单规则来传递参数获取结果。...同样,当Lua调用C函数时,这个C函数也必须遵循某种规则来获取参数返回结果。此外,当Lua调用C函数时,我们必须注册该函数,即必须以一种恰当方式为Lua提供该C函数地址。...延续 通过lua_pcalllua_call,一个被Lua调用C函数也可以回调Lua函数。...虽然这些函数能以”yieldbale”方式重写,但与增加复杂性性能损失相比,这样做似乎并不值得。 C模块 Lua模块就是一个代码段,其中定义了一些Lua函数并将其存储在恰当地方。...与Lua主代码段一样,这个函数还应该初始化模块中所有需要初始化其他东西。 Lua通过注册过程感知到C函数。一旦一个C函数用Lua表示存储,Lua就会通过对其地址直接引用来调用它。

3.7K20
领券