目录一、实战篇 - 注册方式实现函数扩展二、实战篇 - 编写标准扩展库三、实战篇 - 动态库加载方式实现四、实战篇 - 编译Lua动态库liblua.soLua扩展库编写有三种方式:注册方式:在主体语言里面编写扩展函数,然后通过lua_register方式,注册到Lua全局注册表扩展库编写:按照Lua语言本身扩展库设计方式进行编写动态库加载方式:将扩展库编译成.so动态库,Lua语言中
转载 2024-03-18 13:57:45
80阅读
好像很多人都写过这样代码,我是今天确实需求这样功能才想到要写一个,一开始感觉应该不是很难,结果写了下发现原来没有那么容易,搜了下,看到了云风写一个,不过他是树形打印出来,大家可以看这里 http://blog.codingnow.com/2009/05/print_r.html 我觉得不够优美,还是按照大家写 lua table 习惯来打印才比较优美,比如 local a = {
Q:什么是”userdata”?A:”userdata”分为两类,”full userdata”和”light userdata”。Lua使用他们来表示C中一些特殊类型。前面的章节,我们看到了如何通过C编写新函数来扩展Lua;使用”userdata”,我们将可以通过C编写新类新来扩展Lua。Q:两种”userdata”区别?A:\“full userdata”“light userdat
转载 2024-04-29 21:41:15
92阅读
The Debug Library in Lua     选择自 xbcqu Blog 关键字The Debug Library in Lua出处在lua 没有给我们提供一个debugger,但是给我们提供了一个debug库,这个库在debugtable定义了所有的函数,为我们写一个 debugger提供了原始素材,只要我们充分利用它,就可以写一个
背景项目代码打印函数,有的用printf,有的用std::cout,风格不统一,也不方便查看,因此需要编写一个统一函数接口。 需求及实现时间戳该打印函数需要有时间戳,精确到毫秒。这样能直观观察程序运行时间。获取时间使用localtime函数,毫秒获取使用gettimeofday函数。获取时间戳函数get_timestamp没有使用静态局部变量,使用4线程测试,时间戳没有错误情况发生。打印等级
转载 2024-04-08 15:33:57
136阅读
对于互联网行业来说,最有价值数据往往蕴含在服务日志之中。从日志,我们不仅仅可以获取到服务使用量、服务效果、问题定位信息等,还可以通过监控系统及时地识别出服务“健康”状态,规避风险,推动服务优化升级。 在监控系统,日志处理就是采集服务运行时生成原始日志,根据用户配置解析规则,从中提取可用数据,形成监控指标的过程,这个过程一般由监控系统日志采集Agent完成
一、Lua虚拟机栈1.1先简单介绍下Lua虚拟机栈,如图:                                               &n
转载 2024-04-29 11:23:37
0阅读
1. Lua堆栈和全局表我们来简单解释一下Lua堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让C++和Lua通信,是的,它们并不认识对方,只能通过堆栈来沟通,就像写信一样。(旁白:它们不会用微信吗?!微信~!不知道?)Lua全局表又是什么呢?可以想象成是一个map哈希表结构,比如Lua有一个变量:name = “hello”那么,全局表就存放了”name
转载 2024-05-24 21:06:15
73阅读
一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信主要方法是一个无处不在虚拟栈。栈特点是先进后出。在LuaLua堆栈就是一个struct,堆栈索引方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图: lua栈类似于以下定义, 它是在创建lua_State时候创建:  &nbsp
转载 2024-06-04 07:54:29
45阅读
# Redis Lua 如何打印日志 在使用 Redis Lua 脚本时,也许我们并不总是能够直接看到执行结果。由于 Redis 是一个以高性能为目标的内存数据库,Lua 脚本运行在 Redis 服务器上,无法直接在客户端打印日志。这就导致调试成为一个挑战。本文将探讨如何在 Redis 通过 Lua 脚本实现日志打印功能,并解决相关实际问题。 ## 背景 Redis 支持使用
原创 2024-08-10 04:21:07
431阅读
【话从这里说起】在我发表《Lua类型与值》这篇文章时,应该好好总结一下Luafunction和userdata类型。现在是时候总结了。对于function,我在《Lua函数》这篇文章中进行了总结,而这篇文章将会对Luauserdata进行仔细总结。【userdata是啥?】userdata是啥?简单直译就是用户数据,如果再文艺一点,就叫做用户自定义数据。要这货有什么好处呢?首先,
转载 2024-04-24 22:23:45
297阅读
           我们在使用lua时候一定觉得这门语言很高级,什么都不用去处理而且速度很快,超过了一般脚本语言,这是因为其实lua内部是由c来管理内存分配和释放,用起来有点像java垃圾回收器一样,但完全不是一个东西,看过lua源码的人都知道,它是自己建立了一套lua内存管理机制,由
(一)通过一个简单例子来看一下userdata用法:写一个CLua库,让Lua能够访问C数组,借助userdata来实现。(1)VS中新建一个DLL工程,设置好lua包含目录、链接库;(2)新建一个源文件main.cpp,代码如下: #include <stdio.h> #include <string.h> extern "C" { #inc
转载 2024-04-15 12:25:17
111阅读
【测试环境】lua版本: 5.2.1【问题场景】在”luaL_dofile”处报错,并且没有任何错误信息。 代码如下:#ifdef __cplusplus extern "C" { #endif #include "luajit-2.0/lua.h" #include "luajit-2.0/lualib.h" #include "luajit-2.0/lauxlib.h" #ifdef __c
转载 2024-05-06 16:41:18
157阅读
效果解析动态库libtest.so和可执行文件m:打印原始栈#include <execinfo.h>void *array[32] = {0}; size_t size; char **strings; size = backtrace (array, 32); strings = backtrace_symbols (array, size); for (int i
一、Lua使用 lua_shared_dict 共享内存-共享进程间变量    共享内存就是在内存块中分配出一个空间,让几个不相干进程都能访问存储在这里面的变量数据,实际我们用过redis,memcache也具有共享内存意义,redis,memcache等是更高级可跨服务器共享内存,在lua中使用共享内存也非常简单。语法:lua_shared_di
到目前为止,我们写C函数都还是单个函数,函数之间没有联系,也没有涉及返回C结构体以及指针,但实际业务场景中肯定不会这么简单,比如我们现在要扩展lua使之能够操作redis,首先至少需要一个连接redis服务器方法并返回一个连接句柄,然后用这个连接句柄来进行各种查询,最后使用结束还需要关闭这个连接句柄,通常来说,这个连接句柄会是一个结构体,那问题是该怎么返回这个结构体给lua呢。用C操作Re
转载 2024-03-26 12:46:53
107阅读
  函数有两种用途:  1).完成指定任务,这种情况下函数作为调用语句使用;  2).计算并返回值,这种情况下函数作为赋值语句表达式使用。 1 function func_name (arguments-list) 2 statements-list; 3 end; 4 5 --调用函数时候,如果参数列表为空,必须使用()表明是函数调用 6 print(8*9, 9/8)
转载 2024-03-26 08:31:09
161阅读
最近有朋友告诉我 gist 访问不了,让我把一些代码贴到博客里。以后我就挑一些代码放到这里吧。今天放打印 lua table 结构代码代码参考了云风大哥代码思路,但做了小修改,一个是只支持字符串和数字作为 key,另外不处理自己包含自己过程,这样代码更加简单,同时修改了输出格式,使得它更容易被人阅读。gist:https://gist.github.com/rangercyh/5
原创 2014-09-18 08:51:09
5626阅读
        在实际开发过程代码日志是必不可少系统,尤其是在线上版本,对于查找问题相当有帮助。但是cocos2dx lua代码日志是基于luaprint打印,只写在console,不会长久保存。怎么办,那么我们来设计一个简单日志系统,让日志保存下来。        话不多说,直接上代码:(添加了注释)
  • 1
  • 2
  • 3
  • 4
  • 5