随着移动设备的兴起,Lua 作为嵌入式脚本语言,由于其自身的特点及优势,在应用领域使用度越来越高。触动精灵是一个手机游戏辅助平台,可以在上面开发自动化游戏的脚本,编程语言为lua。调用C语言对lua进行扩展可以极大的扩展游戏辅助的功能。下面对最近在这个方面学习的进展做一下简单的总结。

Lua 基于寄存器设计,其代码按照“Clean ANSI C”的标准编写且是解释执行的脚本,可以在任何支持 C 的环境中运行,同时意味着,你可以随时更新它,完全绕开先编译再运行。IOS端lua调用C语言的形式是将C语言函数按照lua接口封装成.so动态库,然后由lua进行调用。

步骤为:
1. Mac系统下lua的安装配置
2. C语言函数封装
3. lua编写

Mac系统下lua的安装和配置

首先需要在Mac系统下安装lua。触动精灵lua core版本为5.2,这里我们安装5.2.1版本,下载地址为http://www.lua.org/ftp/lua-5.2.1.tar.gz
下载完成后,解压缩并进入到其目录下。lua支持的版本有

aix ansi bsd freebsd generic linux macosx mingw posix solaris

找到对应的系统版本,打开命令行,输入 “sudo make xxx”,xxx代表系统版本。make成功后,输入“make xxx install”。
在命令行输入“lua”,如输出了lua版本号,则表明安装成功。

C函数封装

在src目录下新建文件mt.c 输入代码如下

#include <stdio.h>
#include <stdlib.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"/*  库 open 函数的前置声明   */
int luaopen_mt(lua_State *L);/* Function mt_hello_world* @return string "hello lua so,hello world"*/
static int mt_hello_world(lua_State *L)
{const char * name_str = "hello lua so,hello world";lua_pushstring(L, name_str);return 1;
}
//注册函数库
static const luaL_Reg mt_lib[] = {{"hello_world", mt_hello_world},    //定义lua函数名{NULL, NULL}
};
int luaopen_mt(lua_State *L)
{luaL_newlib(L, mt_lib);return 1;
}

命令行下执行:

xcrun -sdk iphoneos gcc -arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=4.3 -O3 -std=c99 -I/opt/theos/include/ -c -o mt.o mt.cxcrun -sdk iphoneos gcc -arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=4.3 -O3 -framework Foundation -framework UIKit -bundle -undefined dynamic_lookup -o mt.so mt.o

生成动态库文件mt.so

触动精灵调用.so的lua编写

新建test.lua如下

init("0", 0);                   --初始化local mt=require "mt"
dialog(mt.hello_world(),0);

执行结果如图

参考资料

[1]Lua 在移动平台上的应用
[2]Mac平台中编译安装Lua运行环境及Hello Lua实例
[3]和我一起写lua - Mac OS X环境编译C模块
[4]触动精灵开发手册-版本 2.2.5

ios平台触动精灵lua调用C语言相关推荐

  1. android桌面快捷方式lua,通过ADB启动触动精灵lua脚本

    需求是这样的:在Android中启动lua脚本,该脚本是通过触动精灵来运行的. 在确保服务开启的情况下,触动精灵脚本可以通过音量键"-"来运行,所以就直接在Android中通过ad ...

  2. lua android弹窗关闭,安卓精灵lua调用pm指令实现清除App缓存,举个栗子的说

    今天刚接触这玩意,试着写点Demo玩玩, 功能要求能自动登陆,在登陆前要先清空游戏的缓存数据,不然游戏就自动登陆了(无法切到账号输入窗口) 本想写图色脚本来实现吧,多种品牌的手机,多种模拟器,多种桌面 ...

  3. iOS平台app如何设置支持多语言

    1.基本设置 第一步:先在Project的info里添加项目所要支持的语言 image.jpeg 如上点击"+"号会弹出所提供的语言,选择所需要的语言就可以了 image.png ...

  4. ios开发愤怒的小鸟的Lua语言:Wax框架详解(一)

    核心提示:我们都知道Objective-C和Cocoa语言可以开发iOS应用,但是一年前,苹果决定在iOS系统上使用Lua语言.Wax框架的想法很简单:凡是Objective-C能做的,Lua也能做! ...

  5. 怎样上android官方下载,【图文教程】如何安装 iOS/Android(安卓)触动精灵?

    iOS 注意事项 必须越狱. iOS12 及其以上系统只能安装专业版 arm64 版本客户端并且购买专业版授权,专业版授权和标准版授权不通用. iPhone 7 10 系统设备由于越狱问题无法使用触动 ...

  6. ios 检测是否联网_iOS 设备打开触动精灵提示“您的网络不给力哦,请检查您的设备是否联网”怎么解决?...

    如果您打开 Cydia 显示"似乎已断开与互联网的连接"请查看:Cydia 提示无网络解决办法,安装乐网后 Cydia 添加 https://apt.abcydia.com 安装 ...

  7. 触动精灵和按键精灵哪个好,如何用按键精灵ios触动精灵及脚本写自动答题脚本...

    答:都差不多,无非是键鼠图色功能,这些软件都具备!其它差异就看你对他们熟悉程序而选择了~~ 比如我经常用按键精灵 首选肯定是安卓按键! 答:不能! 答:只有越狱才有,越狱之后在Cydia搜索autot ...

  8. IOS 安卓 按键精灵 触动精灵脚本逆向解密

    IOS 安卓 按键精灵 触动精灵 脚本逆向解密

  9. Lua与C语言的互相调用

    本系列相关文章: Flutter 热更新及动态UI生成 Lua 15分钟快速上手(上) Lua 15分钟快速上手(下) Lua与C语言的互相调用 LuaDardo中Dart与Lua的相互调用 Lua底 ...

最新文章

  1. 10上wsl位置迁移_wsl的安装/升级笔记
  2. nginx 目录讲解
  3. Swagger如何访问Ocelot中带权限验证的API
  4. hdu 2188巴什博弈
  5. 图像分类数据集(Fashion-MNIST)
  6. eclipse反编译
  7. 坦克大战游戏java代码_Java实现坦克大战游戏的源码示例
  8. 酒店管理系统需求分析
  9. 计算机设置成一个网络,怎样将笔记本电脑设置成一个wifi热点
  10. 博士生DIY超级显微镜,直接看到原子
  11. 新手教程,网站建设第一步:织梦之家Dede程序的下载和安装
  12. 吕广渝:上帝视角看公司运营
  13. 提高数据存储效率的七个技巧
  14. 互联网医疗仅剩的平台型超级独角兽,微医如何冲出重围?
  15. 【招生目录】 2023年北京交通大学计算机学院博士研究生招生专业目录
  16. 图像四则运算(加减乘除)
  17. 生产者和消费者问题-----管程法
  18. BIOS自检与开机故障相关的详尽问答集
  19. python软件下载-Python编程软件下载
  20. CSP考试 202209-1 如此编码

热门文章

  1. OFDMA正交频分技术
  2. 阿里云服务器ECS由什么组成
  3. mysql distinct 优化_SQL优化终于干掉了“distinct”
  4. c# distinct用法
  5. 在pypi上发布python包详细教程
  6. opencv进阶-背景建模-(帧差法与混合高斯模型)
  7. 双精度浮点数的取绝对值
  8. idea为web项目添加tomcat并配置Artifacts
  9. 【数据降维】数据降维方法分类
  10. calcHist的使用