Q:什么是”userdata”?A:”userdata”分为两类,”full userdata”和”light userdata”。Lua使用他们来表示C中一些特殊类型。前面的章节中,我们看到了如何通过C编写新函数来扩展Lua;使用”userdata”,我们将可以通过C编写新类新来扩展Lua。Q:两种”userdata”区别?A:\“full userdata”“light userdat
一、Lua虚拟机栈1.1先简单介绍下Lua虚拟机栈,如图:                                               &n
转载 6月前
0阅读
一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信主要方法是一个无处不在虚拟栈。栈特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图: lua栈类似于以下定义, 它是在创建lua_State时候创建:  &nbsp
1. Lua堆栈和全局表我们来简单解释一下Lua堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让C++和Lua通信,是的,它们并不认识对方,只能通过堆栈来沟通,就像写信一样。(旁白:它们不会用微信吗?!微信~!不知道?)Lua全局表又是什么呢?可以想象成是一个map哈希表结构,比如Lua有一个变量:name = “hello”那么,全局表就存放了”name
【话从这里说起】在我发表《Lua类型与值》这篇文章时,应该好好总结一下Luafunction和userdata类型。现在是时候总结了。对于function,我在《Lua函数》这篇文章中进行了总结,而这篇文章将会对Luauserdata进行仔细总结。【userdata是啥?】userdata是啥?简单直译就是用户数据,如果再文艺一点,就叫做用户自定义数据。要这货有什么好处呢?首先,
转载 6月前
163阅读
(一)通过一个简单例子来看一下userdata用法:写一个CLua库,让Lua能够访问C数组,借助userdata来实现。(1)VS中新建一个DLL工程,设置好lua包含目录、链接库;(2)新建一个源文件main.cpp,代码如下: #include <stdio.h> #include <string.h> extern "C" { #inc
转载 6月前
66阅读
【测试环境】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
最近有朋友告诉我 gist 访问不了,让我把一些代码贴到博客里。以后我就挑一些代码放到这里吧。今天放打印 lua 中 table 结构代码。代码参考了云风大哥代码思路,但做了小修改,一个是只支持字符串和数字作为 key,另外不处理自己包含自己过程,这样代码更加简单,同时修改了输出格式,使得它更容易被人阅读。gist:https://gist.github.com/rangercyh/5
原创 2014-09-18 08:51:09
5486阅读
  函数有两种用途:  1).完成指定任务,这种情况下函数作为调用语句使用;  2).计算并返回值,这种情况下函数作为赋值语句表达式使用。 1 function func_name (arguments-list) 2 statements-list; 3 end; 4 5 --调用函数时候,如果参数列表为空,必须使用()表明是函数调用 6 print(8*9, 9/8)
一、Lua使用 lua_shared_dict 共享内存-共享进程间变量    共享内存就是在内存块中分配出一个空间,让几个不相干进程都能访问存储在这里面的变量数据,实际我们用过redis,memcache也具有共享内存意义,redis,memcache等是更高级可跨服务器共享内存,在lua中使用共享内存也非常简单。语法:lua_shared_di
到目前为止,我们写C函数都还是单个函数,函数之间没有联系,也没有涉及返回C结构体以及指针,但实际业务场景中肯定不会这么简单,比如我们现在要扩展lua使之能够操作redis,首先至少需要一个连接redis服务器方法并返回一个连接句柄,然后用这个连接句柄来进行各种查询,最后使用结束还需要关闭这个连接句柄,通常来说,这个连接句柄会是一个结构体,那问题是该怎么返回这个结构体给lua呢。用C操作Re
如何主动打印调用栈?如果是Java、Js,那么很简单,三行就能实现。但 VisualStudio 就复杂多了。如果不下断点,那么只能在崩溃时候被动查看。而使用 Backward-Cpp ,只需在项目中拖入一个hpp文件,就可以主动打印。但默认输出是 stderr,无法在 VisualStudio output 窗口看到任何信息。全网搜索半小时后,才从另外零星代码片段中推得,需要将 stri
        在实际开发过程中,代码日志是必不可少系统,尤其是在线上版本中,对于查找问题相当有帮助。但是cocos2dx lua代码日志是基于luaprint打印,只写在console中,不会长久保存。怎么办,那么我们来设计一个简单日志系统,让日志保存下来。        话不多说,直接上代码:(添加了注释)
Lua堆栈是很重要不可或缺,就像我旁白一样(旁白:他竟然赞我了。。。好羞涩~)。虽然看起来没什么用,但是少了又绝对不行。   正文: Lua堆栈索引,因为我们在很多操作里都涉及到堆栈索引,比如上一章中我们要从堆栈中取得一个字符串,就必须给出堆栈索引: 1. /* 获取栈顶值 */ 2. const char* str = lua_tostring(pL, 1);
 经过上一章讲解,相信大家也看到了,Lua堆栈是很重要不可或缺,就像我旁白一样(旁白:他竟然赞我了。。。好羞涩~)。虽然看起来没什么用,但是少了又绝对不行。(旁白:你妹纸,你这算是赞人吗?) 笨木头花心贡献,啥?花心?不呢,是用心~正文:  在这里我仅简单解释一下Lua堆栈索引,因为我们在很多操作里都涉及到堆栈索引,比如上一章中我们要从堆栈中取
目录题目描述问题分析拓扑排序关键路径问题解决拓扑排序关键路径题目描述说明: AOE 网络是有向无环加权图,其中顶点表示事件,弧表示活动,权表示活动持续时间,通常可以用来估算工程完成时间,即图中从开始点到结束点之间最长路径对应时间。请完成一个程序,完成下列任务:1 、计算 AOE 网络对应拓扑排序。如果排序结果不唯一,请输出按照从小到大顺序排列结果。从小到大顺序就是输入节点序列顺序
前面的文章分享了通过Lua操作整数、浮点数、字符串、布尔型、表等数据结构,使用起来非常方便,如果可以通过Lua操作用户自定义数据类型,那么就可以极大扩展脚本能力,可以在不改变系统核心模块基础上(即无需修改核心代码,无需编译已上线系统),丰富系统功能。LuaC API已经为我们开放了这样接口,即用户数据Userdata。userdata可以用来存储任何类型数据,而没有预定义操作,对数
2019年8月刚入职新公司时,因为之前项目都没有使用lua经验,所以jojo老大出了一份题让我想尽办法找出答案,当时对于一个无经验小菜鸟来说,属实费了不少功夫,如今分享出来,希望能对刚使用lua朋友们有所帮助,如果有大佬看到有错误地方,欢迎指出,感激不尽。1、Lua基础工作原理,.lua文件实时编译之后,给到虚拟机是什么指令. 具体指令形式有看吗?这个指令占了多少位数据,第n位
脑子不好,老忘,只能写下来。 关键字 and break do else elseif end false for function if in local nil not or repeat return then true until while 变量和操作符 1、lua支持以下几种变量类型 print(type("string")) string pr
Lua中可以通过自定义类型方式与C语言代码更高效、更灵活交互。这里我们通过一个简单完整示例来学习一下Lua中userdata使用方式。需要说明是,该示例完全来自于Programming in Lua。其功能是用C程序实现一个Lua布尔数组,以提供程序执行效率。见下面的代码和关键性注释。#include #include #include #include #define B
  • 1
  • 2
  • 3
  • 4
  • 5