- 博客(92)
- 收藏
- 关注
原创 C++ 与 Lua 的协程交互
Lua 语言不支持真正的多线程,即不支持共享内存的抢占式线程。这样的模式能减少一些多线程的问题。多线程的问题源于线程抢占和共享内存,而如果非抢占式线程或者不使用共享内存则能避免多线程问题,Lua 同时支持这两种方案。Lua 语言的线程是协作式的,即协程,可以避免因不可预知的线程切换带来的问题。Lua 状态间内存不共享,所以各个状态相互独立运行,可以并行操作。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。
2024-02-09 13:37:47
1395
原创 Lua 中使用 C 语言的用户自定义类型——userdata
经过之前的文章分享,我们已经知道如何通过扩展函数来扩展 Lua。但这里涉及到一个问题,Lua 脚本中如何使用 C/C++ 中的类型,如何像操作对象一样操作 C/C++ 类型的实例。解决这一问题就需要用到 userdata 类型(用户数据类型)。完全用户数据(full userdata)轻量级用户数据(light userdata)Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。
2024-02-08 11:37:04
1233
原创 C 函数中如何保存 Lua 的数据
在前面的文章中,C 函数操作的数据的生命周期都是在该函数执行期间。C 语言中无法保存普通的 Lua 值。如果 Lua 库函数中使用了全局变量或静态变量来保存一些数据,会导致该库在多个 lua_State 中使用受到约束。(因为每个 lua_State 间是相互独立的,而 C 函数中使用的全局变量和静态变量却是共用的,这里会出现数据混乱问题。注册表上值经过前面文章的学习,可以知道 Lua 内部存储 “非局部数据” ,则通过 “全局变量” 和 “非局部变量”。
2023-12-20 14:11:58
1074
原创 Lua 中编写 C 函数的一些便捷技巧
使用 Lua 时,在编写 C/C++ 函数经常需要对栈进行交互,而这中间更多的操作和数组、字符串相关。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-12-19 14:20:15
969
原创 Lua 调用 C 模块中的函数
在之前 “Lua 模块与包” 的文章中,介绍了 Lua 通过require是如何引入一个模块的,其中 C 模块并未展开分享。今天就分享如何构建和使用一个 C 模块作为 Lua 的引入模块。Lua 通过注册 C/C++ 函数,进行感知 C/C++ 函数。一旦 C/C++ 函数用 Lua 表示和存储,Lua 就会通过对其地址的直接引用来调用,Lua 对这些 C/C++ 函数的调用不再依赖于函数名、包的位置以及可见性规则。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)
2023-11-27 09:06:13
689
原创 Lua 调用 C++ 函数
从前面分享的 “C++ 调用 Lua 函数” 文章知道,C/C++ 调用 Lua 函数时,是需要按照规则,将参数和函数压入栈中,然后通过lua_pcall或lua_call调用,最终再通过栈获取 Lua 返回的值。同样 “Lua 调用 C++ 函数” 也需要遵循一定规则,而不是所有的 C/C++ 函数均可以进行调用。需要将 C/C++ 函数进行注册,将函数地址提供给 Lua 进行调用。交互过程同样使用了与 C/C++ 调用 Lua 函数时相同类型的栈。
2023-11-21 09:52:52
189
原创 C++ 调用 Lua 函数
Lua 作为一门脚本语言,可以作为 “配置文件”、“动态逻辑脚本” 等角色作用于宿主程序。1. Lua 会处理语法细节,后续维护简单,并且可以有注释。2. 可以编写逻辑,达到复杂的配置。如果我们的程序需要进行一些 “下发配置” 时,一般会考虑选择 “json”、“文件” 等形式。但是如果 “配置” 内容较为复杂,则可以考虑 Lua 了,具体可以查看以下分享。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。
2023-11-20 14:55:07
1089
原创 C++ 与 Lua 交互内存分配
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-11-17 10:18:33
268
原创 C++ 与 Lua 交互异常处理
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-11-16 14:25:06
403
原创 C++ 与 Lua 数据交互载体——栈
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-10-18 17:30:40
244
原创 C++ 集成 Lua
C API 包括读写 Lua 全局变量的函数、调用 Lua 函数的函数、运行 Lua 代码段的函数、以及注册 C 函数(用于后面可以被 Lua 代码调用)的函数等。通过 C API 就可以打通了C 调用 Lua以及Lua 调用 C的渠道。如果是使用 C 语言的话,则直接使用以下进行引用 Lua 头文件如果使用 C++ 则需要嵌套 extern ,或是直接引用lua.hpp// 或是使用 lua.hpp其实 lua.hpp 内部也就是用 extern 进行嵌套这些头文件。Github传送门。
2023-10-16 08:33:45
269
原创 Lua 调试库( debug )
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-10-15 08:20:48
2419
原创 Lua 协程
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-10-14 21:36:31
178
原创 Lua 垃圾回收机制
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-10-13 09:54:26
826
原创 Lua 环境(_G 和 _ENV)
Lua 是动态语言,无法区分常量和变量。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-09-15 23:19:17
2120
原创 Lua 面向对象
Lua 中一张表 table 就是一个对象(注意不是类,是对象表和对象都可以拥有状态表和对象都拥有一个与其值无关的标识(self)两个具有相同值的对象是两个不同的对象,而一个对象可以具有多个不同的值表和对象一样,具有与创建者和被创建者位置无关的生命周期Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-09-13 10:30:47
187
原创 Lua 元表和元方法
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-09-11 07:32:46
232
原创 Lua 模块与包
模块就是一些代码(可以是 Lua 编写的,也可以是 C 语言编写的),这些代码可以通过函数require加载,然后创建和返回一个表,这个表就类似命名空间。所有的标准库都是模块,例如mathstring模块使用表来承载模块,有很显著的优点,可以像操作普通表一样操作模块,而且能利用 Lua 语言的所有功能实现额外的功能。例如引入math模块-- 两种书写方式都可以使用-- sin 使用的是弧度,不是角度也可以直接引入模块中的一个函数,例如以下代码。
2023-09-07 09:38:12
857
原创 Lua 迭代器
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-09-06 07:00:00
370
原创 Lua 编译执行和错误处理
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-08-23 07:28:40
1405
原创 Lua 数据文件和序列化
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-08-22 09:12:11
462
原创 Lua 数据结构
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-08-21 10:00:20
306
原创 Lua 位和字节
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-08-17 23:06:51
2085
原创 Lua 日期和时间
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-08-16 08:00:00
3327
原创 Lua 模式匹配
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。
2023-08-15 13:13:40
515
原创 Lua 闭包
因为函数在 Lua 中与其他类型具有同等权限,所以也可以 table 中定义。第一种方式,用了匿名函数进行定义,只是归属至表Lib1 = {}endend第二种方式,也可以使用表构造器的一种方式(记录式)创建Lib2 = {end,end第三种方式,只是用了常规的函数定义Lib3 = {}endendLua 中可以给一个变量重新定义一个新的函数,也可以给一个预定义函数重新定义函数。例如,我们可以将 sin 函数的参数从原来的 弧度 单位改为 角度 单位。
2023-08-12 21:36:34
1696
原创 Lua 数据类型 - nil
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以第一时间获取到后续文章。
2023-08-11 00:20:43
345
原创 Lua 数据类型 —— 字符串
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以第一时间获取到后续文章。
2023-08-10 23:03:40
861
原创 Lua 数据类型 —— 函数
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以更快的获取到后续的更新文章。
2023-08-10 12:50:32
382
原创 Lua 数据类型 —— 表
表永远是匿名的,表本身和保存表的变量之间没有固定关系。对于一个表而言,当程序不再有变量指向他时,垃圾收集器会最终删除这个表并重用其占用的内存。Lua 不会进行隐藏拷贝或创建新表,操作的都是指向表的指针。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以更快的获取到后续的更新文章。
2023-08-09 09:04:57
475
原创 Lua 数据类型 —— 数值
Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以更快的获取到后续的更新文章。
2023-08-07 23:20:43
850
原创 Lua 数据类型 —— boolean
lua 中只有 false 和 nil 表示假,其他都是表示真。数字 0 和空字符串也表示真。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以更快的获取到后续的更新文章。
2023-08-06 23:04:25
852
原创 Lua 使用 —— IO 操作
Lua 语言是以一个脚本存在,所以他自身不会提供太多和外部交互的机制。需要交互则由宿主提供或是由外部库。接下来分享下如何使用以 iso c 作为宿主,进行标准库的 io 操作。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)本章相关代码传送门公众号搜索 “江澎涌” 可以更快的获取到后续的更新文章。
2023-08-06 22:30:27
1786
1
原创 error: multiple substitutions specified in non-positional format; did you mean to add the formatted
当使用 aapt2 compile -o build/res.zip --dir ./app/src/main/res可能会遇到以下问题./app/src/main/res/values/strings.xml:4: error: multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?../app/src/main/res/valu
2021-09-10 11:17:33
688
原创 小米字体失效问题——android bug
在其他的手机中使用了如下代码进行设置字体样式,显示正常,但在小米时字体却失效了tvDate.typeface = ResourcesCompat.getFont(context, R.font.a)解决方式将代码改为如下即可,记得将字体从 main/res/font 移至 main/assets/fontstvDate.typeface = Typeface.createFromAsset( context.assets, "fonts/a.ttf")...
2021-05-15 15:29:50
1709
原创 undefined reference to `__android_log_print` —— NDK 开发
在 NDK 中增加日志,需要以下步骤第一步:在 CMakeLists.txt 中配置查找日志库find_library( log-lib log)链接库target_link_libraries( native-lib ${log-lib})第二步:使用在 c++ 中增加日志#define TAG "zinc"#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG,
2021-05-15 14:55:30
1133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人