【话从这里说起】在我发表《Lua中的类型与值》这篇文章时,应该好好总结一下Lua中的function和userdata类型。现在是时候总结了。对于function,我在《Lua中的函数》这篇文章中进行了总结,而这篇文章将会对Lua中的userdata进行仔细的总结。【userdata是啥?】userdata是啥?简单直译就是用户数据,如果再文艺一点,就叫做用户自定义数据。要这货有什么好处呢?首先,
转载 2024-04-24 22:23:45
297阅读
(一)通过一个简单的例子来看一下userdata的用法:写一个C的Lua库,让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阅读
到目前为止,我们写的C函数都还是单个的函数函数之间没有联系,也没有涉及返回C结构体以及指针,但实际的业务场景中肯定不会这么简单,比如我们现在要扩展lua使之能够操作redis,首先至少需要一个连接redis服务器的方法并返回一个连接句柄,然后用这个连接句柄来进行各种查询,最后使用结束还需要关闭这个连接句柄,通常来说,这个连接句柄会是一个结构体,那问题是该怎么返回这个结构体给lua呢。用C操作Re
转载 2024-03-26 12:46:53
107阅读
2019年8月刚入职新公司时,因为之前的项目都没有使用lua的经验,所以jojo老大出了一份题让我想尽办法找出答案,当时对于一个无经验的小菜鸟来说,属实费了不少功夫,如今分享出来,希望能对刚使用lua的朋友们有所帮助,如果有大佬看到有错误的地方,欢迎指出,感激不尽。1、Lua的基础工作原理,.lua文件实时编译之后,给到虚拟机的是什么指令. 具体指令形式有看吗?这个指令占了多少位数据,第n位
Lua中可以通过自定义类型的方式与C语言代码更高效、更灵活的交互。这里我们通过一个简单完整的示例来学习一下Luauserdata的使用方式。需要说明的是,该示例完全来自于Programming in Lua。其功能是用C程序实现一个Lua的布尔数组,以提供程序的执行效率。见下面的代码和关键性注释。#include #include #include #include #define B
常见的方法是在 C 对象中保留一个 lua 对应对象的 reference , lua 利用注册表中的数字 key 制作了一个简易的 reference 系统。可以让 C 对象保留一个对 lua 中某对象的引用,使得 lua 的 gc 系统不会错误的回收掉它。效率略高的方法是,直接让 luauserdata 为 C 对象分配内存,这样,可以更直接的利用 lua 的 gc 系统。而我们在 C
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阅读
lua userdata 就是用户自定义类型的数据 直接上例子 wss@localhost:~/lua/userdata/userdata2$ lsarray.so arr_test.lua lib.c log.lua wss@localhost:~/lua/userdata/userdata2$
原创 2022-01-11 17:45:30
684阅读
1、来自Lua 5.0Reference Manual  -The Applicatioin Program Interface -UserdataUserdata represents C values in Lua. Lua supports two types of userdata: full userdata and light userdata.A full userdata
function(函数)在Lua中,函数是被看作“第一类值(First class Value)”。函数可以存在变量里。function可以以匿名函数(anonymous function)的方式通过参数传递。thread(线程)在Lua中,最重要的线程是协同程序,它跟线程差不多,拥有自己独立的栈,局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。userdata(自定义类型)u
转载 2024-05-04 18:59:33
196阅读
C代码: g_Runtime->set_on_connection([](TCPConnection& conn) { //调用lua函数 on_connection(conn) }); lua函数: function on_connection(conn) print(conn:is_connect()) end 问题:怎么在C/C++里调用一个参数是C++
 这一段时间看了《programming in lua》中的第28章,看一遍并不是很难,但是只是朦胧的感觉,雾里看花,水中望月。最终还是决定敲出来自己看看,练练手,结果受益不少,也遇到了一些问题,记在这里。自己做一个总结,也希望能帮助和我一样lua的初学者。1. 书上并没有写清楚对于CAPI的制作和使用内容。主要包括dll的生成,以及使用(1)dll生成。  直接用vs新建一个dll工程,要记得包
转载 2024-02-23 16:58:24
351阅读
tolua中c#和lua交互过的对象都有一个ref编号, ref是int类型,ref唯一不重复,一个ref对应一个c#对象tolua中任何c#对象在lua中对应的userdata都是一个int类型的内存指针地址,通过对这个userdata设置不同的metatable来区分userdata对应的c#类型这个userdata指针指向的int内存的值等于第1条的ref值,比如有个c#对象的ref等于13
转载 2024-09-02 11:49:38
100阅读
Q:如何使用”userdata”的”metamethods”?A:我们继续来修改上一节中的例子,这次我们的目标是使用面向对象的方式调用”userdata”的方法。这个目标既可以在Lua中实现,也可以在C库中实现,我们先来看一个比较简单的方式,在Lua中实现。”mylib.c”中代码无需更改,只需要修改”a.lua”中的代码,local array = require "mylib" --[[ 这
转载 2024-03-20 10:13:57
124阅读
前言这篇博客,我估计写不好。一方面是内容挺绕,一方面是我没有看过书,是照葫芦画瓢写代码。前置要求:Lua调用C代码lua中表与元表Lua操作C语言用户自定义类型数据Userdata上面第三个链接的内容是,C语言自定义数据类型,在Lua中使用userdata表示。Lua调用C中的函数,操作userdata。这样写也挺好,但是分割了userdata函数。我们知道,lua有元表。那能否将C中的函数,注
转载 2024-04-07 12:29:51
311阅读
loadfile,加载文件,编译文件,并且返回一个函数,不运行dofile其实就是包装了Loadfile,根据loadfile的返回函数运行一遍require加载文件的时候,不用带目录,有lua自己的搜索加载目录的路径,并且会判断文件是否加载过,加载过则不加载.下面是详细介绍:摘自《Lua程序设计第二版》虽然我们把 Lua 当作解释型语言,但是 Lua 会首先把代码预编译成中间码然后再执行(很多解
转载 7月前
48阅读
学习lua将近半个月了,以前也了解过,只是没有实际运用的环境。现在将自己这半个月来的心得写下来。首先,要想在C++程序中作用lua脚本,必须包含相应的lua头文件,extern "C" { #include <lua.h> #include <lualib.h> #include <lauxlib.h> }因为lua是基于c的,所以要使变量和函数按照
转载 2024-03-21 19:40:55
115阅读
Lua Userdata (一)通过一个简单的样例来看一下userdata的使用方法: 写一个C的Lua库,让Lua可以訪问C的数组。借助userdata来实现。 (1)VS中新建一个DLLproject,设置好lua库的包括文件夹、链接库; (2)新建一个源文件main.cpp,代码例如以下: #
转载 2017-07-04 21:02:00
216阅读
2评论
Lua C API编程上,经常有一些博客会说,必须使用luaL_newmetatable和luaL_setmetatable来给userdata加元表。还说给userdata加的元表不是普通的table。于是本着不信邪的态度,我翻了一下源码并自己尝试写了一些测试。普通的表能做userdata的元表么对于这个问题,我觉得是可以的,因为Lua中只有这一种数据结构,不存在什么特别的表。class A
转载 2024-04-09 10:28:22
137阅读
最简单的构造式就是一个空构造式{},用于创建一个空table。构造式还可以用于初始化数组。例如,以下语句:days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}会将days[1]初始化为字符串“Sunday”、days[2]初始化为"Monday",以此类推。Lua
  • 1
  • 2
  • 3
  • 4
  • 5