故事背景:  自己手动手写的一个lua外部库luaopen_xxx,采用了tolua++1.0.93,编译后得到xxx.dll,当在luajit中require 'xxx'后是正常的,但如果运行环境换成lua5.1.4,进程崩溃,调试后发现,出问题的现场在这个函数:  /*
** generic allocation routine.
*/
void *luaM_realloc_ (lua_Sta            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-27 09:35:36
                            
                                72阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            ◆ nil(空)  nil是一种类型,Lua将nil用于表示“无效值”。一个变量在第一次赋值前的默认值是nil,将  nil赋予给一个全局变量就等同于删除它。local num
print(num)-->output:nil
num = 100
print(num)-->output:100值得一提的是,OpenResty的Lua接口还提供了一种特殊的空值,即 ngx.null,用来表            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-01 20:12:46
                            
                                26阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Unity Text添加空格导致换行问题今天碰到了一个问题,在Text控件里面有两行的字体,在第一行中添加一个空格,然后导致第一行后面的内容都跑到了第二行。一开始没搞懂,查了一下发现并不是bug。这个功能是Unity用于英语等西文的,是为了保证单词不会分开显示,所以第一行空格后面的字被Unity当成一个单词给换行处理了。那么如何解决呢?方法1:使用全角空格在输入法里面把半角模式改为全角模式,然后输            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-12 20:47:14
                            
                                29阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            CCS的lua库apitags: ccs framework.ccs ccs基础库,将ccs的gui类封装到了lua. ccs.layerUILayer层 用法示例:local layer = ccs.Layer() ccs.widget ccs的基础控件ccs.TouchEventType 格式: widget = ccs.widget(参数表格对象)参数表格对象:enabled:"            
                
         
            
            
            
                
   空格、TAB、换行符都是在写程序代码的过程当中看不见的空白符号。 
     
   这方面的权威信息在哪里能找到?答案是Google。 
     
   关键字举例: 
     
   space tab 
     
   space and tab 
     
   space or tab 
     
   line break 
     
   new            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-18 22:34:17
                            
                                73阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、程序的版式1.1 空行需加空行: 函数之间都要加空行;函数内部代码概念与逻辑之间,逻辑段落小节之间,都应该加空行;注释行之前。不加空行: 在一个函数体内,逻揖上密切相关的语句之间不加空行;多行注释解释参数的时候,注释之间不加空行。1.2 空格 需加空格:”and“,”or“等关键字前后留一个空格,便于辨析;逗号”,“后面要留一个空格;赋值操作符、比较操作符、算术操作符如”=            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-10 10:01:25
                            
                                152阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Lua基础数据类型nil 空nil 表示"无效值"变量赋值前默认为nil将nil赋予给一个全局变量就等同于删除它number 数字Number 类型用于表示实数,和 C/C++ 里面的 double 类型很类似。math.floor(向下取整)和 math.ceil(向上取整)String 字符串字符串还可以用一种长括号(即[[ ]])括起来的方式定义。我们把两个正的方括号(即[[)间插入 n 个            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-13 21:26:18
                            
                                71阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            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++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图:  lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的:               
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-04 07:54:29
                            
                                45阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、Lua虚拟机的栈1.1先简单介绍下Lua虚拟机的栈,如图:                                               &n            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-29 11:23:37
                            
                                0阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            【话从这里说起】在我发表《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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Nil:Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量赋值nil可以删除该变量。Booleans:两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。Number:Lua中没有整数。Strings:Lua可以高效的处理长字符串,1M的strin            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-03 20:23:34
                            
                                299阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            【测试环境】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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
              函数有两种用途:  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阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、Lua使用 lua_shared_dict 共享内存-共享进程间变量    共享内存就是在内存块中分配出一个空间,让几个不相干的进程都能访问存储在这里面的变量数据,实际我们用过的redis,memcache也具有共享内存的意义,redis,memcache等是更高级的可跨服务器的共享内存,在lua中使用共享内存也非常简单。语法:lua_shared_di            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-21 09:22:29
                            
                                68阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            到目前为止,我们写的C函数都还是单个的函数,函数之间没有联系,也没有涉及返回C结构体以及指针,但实际的业务场景中肯定不会这么简单,比如我们现在要扩展lua使之能够操作redis,首先至少需要一个连接redis服务器的方法并返回一个连接句柄,然后用这个连接句柄来进行各种查询,最后使用结束还需要关闭这个连接句柄,通常来说,这个连接句柄会是一个结构体,那问题是该怎么返回这个结构体给lua呢。用C操作Re            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-26 12:46:53
                            
                                107阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如何主动打印调用栈?如果是Java、Js,那么很简单,三行就能实现。但 VisualStudio 就复杂多了。如果不下断点,那么只能在崩溃的时候被动查看。而使用 Backward-Cpp ,只需在项目中拖入一个hpp文件,就可以主动打印。但默认输出是 stderr,无法在 VisualStudio 的 output 窗口看到任何信息。全网搜索半小时后,才从另外零星的代码片段中推得,需要将 stri            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-28 09:36:06
                            
                                297阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
                    在实际开发过程中,代码日志是必不可少的系统,尤其是在线上版本中,对于查找问题相当有帮助。但是cocos2dx lua的代码日志是基于lua的print打印,只写在console中,不会长久保存。怎么办,那么我们来设计一个简单的日志系统,让日志保存下来。        话不多说,直接上代码:(添加了注释)            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-16 13:24:20
                            
                                134阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Lua的堆栈是很重要不可或缺的,就像我的旁白一样(旁白:他竟然赞我了。。。好羞涩~)。虽然看起来没什么用,但是少了又绝对不行。   正文: Lua堆栈的索引,因为我们在很多操作里都涉及到堆栈的索引,比如上一章中我们要从堆栈中取得一个字符串,就必须给出堆栈索引:   1. /* 获取栈顶的值 */  
2. const char* str = lua_tostring(pL, 1);            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-29 12:41:34
                            
                                66阅读
                            
                                                                             
                 
                
                                
                    