展开

关键词

LuaC如何(二)

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

53310

LuaC如何(一)

要理解LuaC,先要理解堆栈全局表两个概念堆栈LuaCC++语言主要方法是一个无处不在虚拟栈,栈特点是先进后出.? 在Lua中,Lua堆栈就是一个struct堆栈索引方式可是是正数也可以是负数正数索引1永远表示栈底,负数索引-1永远表示栈顶全局表Lua全局表可以想象成一个map哈希表结构,比如Lua有一个变量: name = “hello world” 全局表中存放了namehello world对应关系, 可以通过name在全局表中找到对应hello world方式hello.lua name = CC++想要获取Luaname字符串值, 首先把name放到堆栈(栈顶),方便Lua看到;Lua从堆栈(栈顶)获取到name值, 此时栈顶变为空;Lua去全局表中查找name对应字符串;全局表返回对应字符串 **注意:**为了更好展示原理,文中图片来自于网络上博客中图片.参考Lua篇(第01章):让LuaC++牵手Lua初学者(四)–Lua调用原理展示(lua堆栈)

62640
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

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

    lua cpp

    编译 lua5.3例子中涉及为 lua 编写 so,(lua require 加载) 需要修改 luasrc 下makefile cppflag 加 -FPIC, 这样后续链接so才不会报错$ curl -R -O http:www.lua.orgftplua-5.3.0.tar.gz$ tar vzxf lua-5.3.0.tar.gz$ cd .lua-5.3.0#sudo apt-get install libreadline-dev$ make linux test$ sudo make installcpp 调用luacpp 调用lua基本流程是:lua 函数名入栈,参数依次入栈,调用lua call 如下例子,lua 脚本 test.lua 中定义一个函数function add(x, y) print(add); return x + y;end通过 cpp 代码加载脚本并调用 add 函数实现如下 :#include #include lua 库所有头文件using namespace std; int main(){ 创建lua vm lua_State* L = luaL_newstate

    31940

    lua调用C函数

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

    1.5K31

    Lua 挺好用样子

    比如 for key, value in pairs(…) do end; a, b = b, a a,b,c = c,a,b等等。 这里 key,valuea,ba,b,c都是多元组 Javascript一样,都支持语句尾部分号自动补全。 可以以此前面metatable来模拟多态特性 工具外部支持:Lua嵌入其他语言比较简单。因为Lua调用是栈式,不过代码写起来不怎么美观。 有很多工具提供了Lua其他语言接口抽象代码生成工具,如swig、tolua、tolua++等等。 Javascript稍微麻烦点,但是Javascript代码看起来比较漂亮,特别是Node.js内用V8引擎然后写C++插件(详见:http:nodejs.orgapiaddons.html)。

    58330

    C++与Flash

    研究Flash嵌入游戏中可行性.......渲染问题已解决事件响应已解决下面是C++与Flash AS, 以MFC为例:1. 新建一个MFC Dialog程序2. 添加一个Flash控件3. 这个很简单, 在flash那个Button组件动作中添加脚本:on(click) { fscommand(MsgBox, 这是flash调用c++响应); } 然后在MFC中添加事件响应: void C++调用Flash. +调用flash响应 ); } 另外, 还可以通过GetVariable()SetVariable()来设置flash中定义变量8. 导出一下flash, 编译一下C++, 就可以看到效果了:

    52480

    C++ python

    代码片段如下,typedef map smap;要转换map转换函数string req_update_userprofile_pack_data2(std::string workkey,PyObject 0;PyObject *key;PyObject *value;smap m_profilelist;while (PyDict_Next(dict_user, &i, &key, &value)) C+ +中遍历pythondict对象。

    20710

    【开源公告】unreal4引擎lua开发首选解决方案sluaunreal正式开源

    slua-unrealsluaunreal作为unreal引擎插件,通过unreal自带蓝图接口反射能力,结合libclang静态c代码分析,自动化导出蓝图接口静态c接口,提供给lua语言,使得可以通过 lua语言开发unreal游戏业务逻辑,方便游戏高效迭代开发,上线热更新,同时支持luac双向,lua到蓝图双向调用,使用lua语言完美替代unrealc开发方式,修改业务逻辑不需要等待c++编译, 通过蓝图反射机制,自动导出unreal 4蓝图api到lua接口支持以lua function作为蓝图事件回调函数支持普通c++函数类 通过静态代码生成或者泛型代码展开导出到lua接口,同时支持与蓝图接口完整支持了 方法支持从蓝图中调入lua,并接收lua返回值,支持任意参数类型任意参数个数支持蓝图out标记参数,支持c++非const引用作为out类型参数返回unreal4引擎lua开发首选解决方案sluaunreal 欢迎提出你 issue PR

    76931

    【游戏开发】小白学Lua(上)

    脚本语言可以作为初始化文件读入变量游戏数据一个快速而方便方法。它们通常因为具有节省编译时间提高生产效率、提高创造性拓展性有点而受到众多游戏开发厂商青睐。 在本篇博客中,马三将大家一起学习一下Lua这门脚本语言。 一、搭建Lua运行环境 学习任何一门编程语言恐怕都是要先搭建起来它开发环境,这样才能多写代码多练习。 Lua有一个解释程序(lua.exe),你可以用它来验证一些小代码片段,但是对于比较长复杂代码,最好是使用CC++Lua API来运行,下面代码就是从CC++程序中运行一个Lua脚本所需代码块 :extern C{ #include #include #include }  第一步要做就是包含相关头文件,因为Lua是一个纯C库,所以必须显式地让编译器知道这一点,不然就会遇到问题。 通过将#include extern C一起使用就可以解决了。包含lua库。

    60430

    lua调用c语言so动态库--以waf中证书检查为例

    ​需求在基于nginx做waf开发时,nginx+lua+c动态库是常见开发模式,在lua生态无法满足需求时,就需要我们在lua代码中调用动态库方式,进行扩展,下面以lua调用c语言+openssl 动态库方式,进行判断证书创建时间证书过期时间为例,进行说明 由于lua没有openss sdk做证书检查校验工作,那么就需要我们基于c语言openssl库些一个so动态库,以供lua调用去判断证书有效时间 c函数从lua获取参数与luac函数,所有函数入参参数固定为lua_State *L。 那么在c函数中,需要通过lua_tostring(L,1)lua_tonumber(L,2),分别获取lua传来两个参数(即:string类型number类型)。 = lua_tostring(L,1),获取lua传来证书路径,随后在c语言函数中调用openssl函数进行一些列操作。

    22630

    Lua学习笔记

    -i: 在执行完指定Lua程序文件之后,并不退出解释器程序,而是直接进入该程序模式。 在解释器程序模式下,我们可以通过在表达式前加等号(=)标识符方式直接输出表达式执行结果。 其中脚本名(lua-script.lua)位于table索引0位置上。它第一个参数(a)则位于索引1,其它参数以此类推。这种索引方式C语言中读取命令行参数规则相同。 在这两种形式中,都是通过Lua提供C API完成两种语言之间通信。1. 基础知识: C API是一组能使CC++代码与Lua函数。 栈: 在LuaC语言之间进行数据换时,由于两种语言之间有着较大差异,比如Lua是动态类型,C语言是静态类型,Lua是自动内存管理,而C语言则是手动内存管理。 为了解决这些问题,Lua设计者使用了虚拟栈作为二者之间数据介质。在CC++程序中,如果要获取Lua值,只需调用LuaC API函数,Lua就会将指定值压入栈中。

    1.4K60

    python 与 C (ctype

    python 与 C (ctypes库使用) ctypes是Python一个外部库,可以使用python语言调用已经编译好C语言函数以及数据类型并进行数据换等。 2. python调用c语言函数库1.生成c语言函数#Step 1: test.c #include int add(int a, int b){ return a + b;}2.编译动态链接库生成 指针实例有一个contents属性,返回这个指针所指向对象。 函数 说明 byref(x ) 返回 x 地址,x 必须为 ctypes 类型一个实例。相当于 c &x 。 print pi2.contentspointer POINTER 区别是,pointer 返回一个实例,POINTER 返回一个类型。 4.结构类型数据StructuresUnions必须继承StructureUnion基础类,它们都在ctypes模块中定义,每一个子类必须定义个fields属性,fields是一个二维tuples

    38030

    Cocos 2d-X Lua游戏开发Mac环境搭建以及一点点感悟

    C++,JavaScript , Lua 三个选择,它们你真正利用它们做游戏就像你懂OC、Swift。 相信每一个程序猿对CC++是有一定掌握,按照自己学习JSLua过程,它们学习难度都不大,完全可以通过对C掌握来相对容易拿下它们。 其次,由于 Cocos2d-x 中使用C++ 语言,而 C++ 又对开发人员要求较高,所以逐渐地,开发者们开始将 Cocos2d-x C++ 接口转成了 Lua 接口,从而衍生出了 Cocos2d-lua 不传播负能量啦,说说后面,其实很想仔细把iOS内存管理,Block以及多线程东西也好好总结一下,最近给游戏里面负责添加了苹果原生支付,所以LuaiOS以及苹果内购方面东西也值得好好总结一下啦 接下来应该会先总结LuaiOS以及支付事,毕竟也要给客户写文档,到时顺便把这些一起做了。      猿猿们,1024快乐!!!

    913100

    android中使用luaj

    背景 开发中有一些场景,需要使用到动态化能力,除了插件热补丁。 我们还可以使用脚本,相比插件化与热补丁,脚本更加灵活安全(Google对插件化持禁止态度),在android中常用脚本有pythonlua。 执行效率高 内存占用小 本文主要讲述android与lua调用问题。 ,应该是用来加载so文件,然后可以实现luac预研进行。 总结 lua作为一种轻量级语言,与其他语言结合后,在解决实际问题中会有非常多好处。也会有一些缺点,比如资料较少,语法java等有较大差异,开发者需要一段时间熟悉。但总来说,还是非常推荐

    1.1K50

    ​terracling:前端metalangsys后端uniform backend免编程binding生成式语言系统设想

    本文关键字: 用terra打造更科学js,cpp,用lua+c分离式模拟JS。 ,,,注意是从terra到luastaging,这二者欠入性来说,分清二种语言,terra corefull terra langsys,一份具体用该语言写代码是terra-lua代码。 因为事实上luaC是完全不同二种语言,它们interportable终究只是他们外在属性,内在它们是不可,那么这二者是如何联接起来呢?技术本质过程到底如何? 这二门语言有共同词法作用域所以就保证了这二门语言无缝性(interpreter),极力使得他们像一门语言(中变量作用域处理部分),除此之外,其它二门语言不同部分,依然是原本二门独立语言该有(cterra lua有着极广泛融合性interopable)。

    16310

    常见编程语言对REPL支持情况小结

    编程术语 REPL (Read-Eval-Print Loop) 中文话有翻译成“式解释器”或“式编程环境”。 It can be used for debugging, testing, or just trying things out.式解释器(REPL)既可以作为一个独立程序运行,也可以很容易地包含在其他程序中作为整体程序一部分使用 REPL为运行JavaScript脚本与查看运行结果提供了一种方式,通常REPL方式可以用于调试、测试以及试验某种想法。 下面列举一些常见编程语言对 REPL 原生支持: 原生就有REPL语言Common Lisp Ruby Python Lua原生不带REPL语言JavaScript PHP JAVA C# C++ 这种分享代码片段方式比snipplrgithub gist这种单纯贴代码方式要更为先进一些.支持语言如下: C C++ D Haskell Lua OCaml PHP Perl Plain Text

    59840

    Lua函数式编程

    中sock变量会被GC掉,就要从Lua基本规则说起:在Lua中,一共有8种基本类型: nil、boolean、number、string、function、userdata、 thread table 在编写Lua代码时,却往往根据以往cc++经验来判断变量生命周期, 毕竟就算在如java,C#这些带GC面向对象语言中,这些经验依然适用。 先来大致看看面向对象哲学。在纯面向对象编程语言中(C++显然不算),所有逻辑均是在对象之间产生,不允许变量产生在对象之外。即使他们在努力模仿函数式编程,比如所谓委托,匿名函数。 而实现万物皆函数,闭包是函数式编程必不可少条件(这里不讨论纯函数式编程范式,连LISP都不是纯函数式编程语言)。在函数式编程范式中,所有逻辑均是以函数(闭包)为主体来运行。 在Luarequirechunk机制中我摔跟头充分验证了这一点。

    32220

    手游热更新方案xLua开源:Unity3D下Lua编程解决方案

    全平台热补丁技术,可以运行时把C#实现(方法,操作符,属性,事件,构造函数,析构函数,支持泛化)替换成lua实现;自定义struct,枚举在LuaC#间传递无C# gc alloc;编辑器下无需生成代码 接口打印了一个log(C#静态函数在CS下直接可用);C#调用lua系统函数math.maxxLua支持把一个Lua函数绑定到C# delegate。 math.max绑定到C#max变量后,调用就一个C#函数调用差不多了,而且,最最重要是,执行了”XLuaGenerateCode”后,max(32, 12)调用是不产生(C#)gc alloc 不仅仅GC优化这块,LuaC#间相调用性能也可圈可点,具体可以关注我们发出性能测试报告。PS:我们性能测试没有用网上流传较广那套用例。 扩展性开发中我们往往要用到很多东西,比如用PB后台,解析json格式配置文件等等。虽说我们都可以在C#那找到相应库,然后通过xLua去使用这些库,但这效率不高,最好能有相应Lua库。

    79560

    手游热更新方案--Unity3D下CsToLua技术

    (这也是一些外挂套路,也有加壳加密技术来提升反编译难度了,此处省去一万字)上面代码等价于如下:Mono.Cecil底层是如何处理呢,再举一个例子,这是原始C#代码:上面是C#逻辑打包成dll ILSpy=====ILSpy是一个开源.Net反编译器,能把C#生成二进制文件转换为MSIL或者C#任选一种。因为项目C#程序集是团队开发,因此不需要破解加密算法去壳等操作。 是一个实现Lua微软.Net平台CLR混合编程开源库,使得Lua脚本可以实例化CLR对象,访问属性,调用方法甚至使用Lua函数来处理事件。 Lua虚拟机启动主流程:Unity C#与Lua,麻将项目主要采用了Wrap文件这种非反射方式实现。 以下为生成绑定具体流程:生成后WrapperConfig文件如下所示:举个例子说明绑定具体实现,C#代码如下:ToLua绑定后生成代码:C#中对象在传给Lua时并不是直接把对象暴露给了Lua

    53720

    腾讯热更新方案开源了

    替换成lua实现;2、自定义struct,枚举在LuaC#间传递无C# gc alloc;3、编辑器下无需生成代码,开发更轻量;; 初探xLuaxLua设计原则是保证了运行效率前提下,尽量保证开发效率 1、第一第三行分别LuaEnv创建以及销毁,所谓LuaEnv可以理解为lua虚拟机,往往整个工程一个虚拟机即可:2、DoString里头可以是任意合法lua代码,例子中调用了UnityEngine.Debug.Log math.max绑定到C#max变量后,调用就一个C#函数调用差不多了,而且,最最重要是,执行了“XLuaGenerate Code”后,max(32, 12)调用是不产生(C#)gc alloc 不仅仅GC优化这块,LuaC#间相调用性能也可圈可点,具体可以关注我们发出性能测试报告。PS:我们性能测试没有用网上流传较广那套用例。 扩展性开发中我们往往要用到很多东西,比如用PB后台,解析json格式配置文件等等。虽说我们都可以在C#那找到相应库,然后通过xLua去使用这些库,但这效率不高,最好能有相应Lua库。

    1.6K30

    相关产品

    • IP 虚拟人

      IP 虚拟人

      IP 虚拟人(IP Virtual Human,IVH)运用了语音交互、数字模型生成等多项 AI 技术,让 IP 虚拟人的口型与发音一致、表情及动作自然拟人。IP 虚拟人支持 AI 合成虚拟形象播报视频和实时语音交互两大类使用场景,其中虚拟形象播报能力支持输入文本生成 AI 合成的音视频文件,广泛运用于媒体、教育、会展服务等场景;语音交互场景支持与用户进行实时语音互动,广泛运用于客服、助理等场景。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券