先看一张流程图如下:

第一步:

   先把NDKHelper中的方法转成LUA中可以调用的,转得方法可参考quick中LUA的用法。这个类主要是中间桥梁的作用,它可以根据是什么平台调用IOSNDKHelper或者AndroidSNDKHelper,这些判断都是用C语言来写的。还有就是对一些回调函数的保存机制和平台要用LUA中一些方法的保存。

第二步:

   IOS平台需要处理的就是IOSNDKHelper,这个类主要就是接收和发送给NDKHelper数据的方法,还有一个就是加载IOS平台的BasePlatformHelper类和继承该类的子类。最后写不同SDK需要用到的方法,这个方法都是在 BasePlatformHelper的子类中写。这些方法是和LUA中对应的。完成后在初始化的时候把它和它的父类通过IOSNDKHelper加载到内存当中。

第三步:

   Android的处理方式和ios差不多,按照ios的思想写就可以。其中Android中需要AndroidSNDKHelper类,它的作用也就是接收和发送函数、参数到到NDKHelper中,还有就是加载Android中平台要用的方法到内存中。

第四部:

流程如下

    在LUA中调用sendMessageToNative方法时传入需要调用的方法和参数以及回调函数,在该方法中如果有回调函数的话,就把回调函数保存到内存当中,然后在调用C语言中得方法判断是IOS还是Android平台,如果是IOS平台的则就会调用IOSNDKHelper中的RecieveCPPMessage方法,RecieveCPPMessage这个方法会根据你传入的方法名和参数调用在平台上定义的方法。该方法执行完以后如果不需要返给调用者数据的话,这个流程就完成了,如果需要返给调用着数据的话,就把要反的数据和函数名通IOSNDKHelper类中 SendMessage方法传回去。在SendMessage方法中会把你传入的参数做处理然后在调用NDKHelper类中得HandleMessage方法,在HandleMessage中会根据你传入的方法名在内存中查找之前你传入的回调函数句柄,然后用参数和函数句柄根据LUA的处理方式调用LUA中对应的方法。Android的和ios的调用类似。

以上就是LUA中调用平台的方法流程。

    平台把调用LUA中的方法时就是把调用的方法和参数通过 IOSNDKHelper和AndroidSNDKHelper 传给NDKHelper,NDKHelper通过处理后调用LUA 方法。

以上就是个人的一点理解,有理解错误的地方希望大牛给予指点。

转载于:https://www.cnblogs.com/liwenxue88/p/3915733.html

cocos2d-x 中LUA和平台之间的函数调用理解相关推荐

  1. 决战云时代--“微服务”连接企业级应用(SaaS)与云计算平台之间最后一公里

    一.背景 Martin Fowler 在 2014 给出了"微服务"架构(microservice)定义,现以是国内软件产业界最火热的名词之一.无论是刚毕业的学生,还是做应用开发的 ...

  2. 人工智能技术在内容行业的应用:AI对中长尾内容平台还是奢侈品

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:随着人工智能技术的发展,媒体行业本身在不断地发生变化,从传统媒体到新媒体,改变的不仅是信息载体,更是一种新的逻辑,无论是内容 ...

  3. 在AWS中部署OpenShift平台

    OpenShift是RedHat出品的PAAS平台.OpenShift做为PAAS平台最大的特点是它是完全容器化的PAAS平台,底层封装了Docker和Kubernetes,上层暴露了对开发者友好的接 ...

  4. C++中数字与字符串之间的转换 scanf string总结(复习必读)

    1 string的scanf读入操作 C++里面控制台输入直接使用cin操作就可以了:或者getline(istringstream,string); 字符和数字加减就是字符的ASCII码和数字直接加 ...

  5. Java设计模式、框架、架构、平台之间的关系

     1.设计模式 为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单.那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类.对象和接口之间的关系,是前人总结的 ...

  6. Redis 中 Lua 脚本的应用和实践

    引言 前段时间组内有个投票的产品,上线前考虑欠缺,导致被刷票严重.后来,通过研究,发现可以通过 redis lua 脚本实现限流,这里将 redis lua 脚本相关的知识分享出来,讲的不到位的地方还 ...

  7. 关于在不同版本和平台之间进行还原或复制的常见问题

    用途 问题和答案1) 我能用更高版本的 Oracle 还原或复制旧版本的数据库吗?2) 我能在两个不同的补丁程序集之间进行还原或复制吗?3) 我能在同一操作系统的不同版本之间进行还原或复制吗?4) O ...

  8. 中通开放平台简介——连锁门店解决方案

    中通开放平台(以下简称"平台")是提供中通大客户一站式接入服务的平台,提供各项API的接入服务,供客户.第三方软件供应商或第三方服务商与中通进行系统对接,连通与中通系统之间的信息流 ...

  9. 几种三维平台之间的数据转换

    几种三维平台之间的数据转换 GIS的三维数据格式 BIM中的三维数据格式 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPants 创建一个自定义列表 如何创建一个注脚 注 ...

最新文章

  1. 一文读懂语音识别技术原理
  2. PHP绕过disable_function限制(一)
  3. linux共享内存通信方式,linux下进程通信方式--共享内存
  4. 网站后端_Flask-第三方库.利用Flask-Socketio扩展构建实时流应用?
  5. 成功解决eric6 Create Dialog Code XXX.py exists but does not contain any classes
  6. mysql5.6 error
  7. Xamarin.Android之封装个简单的网络请求类
  8. php stortime,文件存储 | 综合话题 | Laravel 5.3 中文文档
  9. 使用jclouds库在Amazon S3上上传
  10. python 规则引擎 drools_Drools规则引擎入门demo
  11. Python——匿名函数lambda
  12. C++ :stringstream介绍,使用方法与例子(转)
  13. elasticsearch 安装sql
  14. python报表自动化系列 - 为pandas.DataFrame制作自然数索引(更改索引为从1开始的自然数)
  15. VS2010 + VS2008 快捷键
  16. 魔方机器人之下位机编程-----两种串口通信方式的比较
  17. kvaser 驱动修复(linux)
  18. 实验记录 | 为什么mtDNA的fastq数据会比对到常染色体上?
  19. 切换svn地址报错issuer is not trusted
  20. unity之使用FPS第一人称后鼠标消失

热门文章

  1. 奶粉中的php是什么,婴儿配方奶粉的分类及用途
  2. linux使用ftp命令_如何使用Linux FTP命令
  3. android自定义进度条_Android中的自定义进度栏
  4. 实现视图示例_AngularJS控制器,范围和视图教程示例
  5. 看看DelayQueue源码
  6. 开课吧Java教程之什么是Arrays
  7. vue + typescript 父子组件传值记录
  8. C++实现整数值转中文大写
  9. 发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】
  10. 大数据下,谁来保护裸奔的个人隐私