博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
luars232库中用到的一些C API for lua
阅读量:6609 次
发布时间:2019-06-24

本文共 1407 字,大约阅读时间需要 4 分钟。

代码就不贴了,这里只是梳理一下前两篇里面忽略的一些东西,作为读代码的记录吧。

1、头文件

#include 
#include

All API functions and related types and constants are declared in the header file “lua.h”。

The auxiliary library provides several convenient functions to interface C with Lua. While the basic API provides the primitive functions for all interactions between C and Lua, the auxiliary library provides higher-level functions for some common tasks. All functions from the auxiliary library are defined in header file lauxlib.h and have a prefix luaL_.

 

2、void *lua_newuserdata (lua_State *L, size_t size)。

首先我们需要知道一下什么叫userdata?额,我的理解,C里面的所有数据类型,在lua中只有一个名字userdata。事实上,这里只是一块内存而已。如果还记得lightuserdata的话,也应该记得,这个是一个指针。

lua_newuserdata这个调用是申请了一块大小为size的内存,然后返回指向这块userdata的一个指针(void型),指针指向这块空间首地址;同时往堆上push一个userdata类型element。

lua并不能理解userdata,不能对其内容进行运算等操作。所以,使用userdata,我们还需要添加相关的操作方法,另外,new出来的userdata,还需要给他添加gc元方法供lua收回释放。

至于什么时候userdata会被gc收回。。。唔,我找了半天没明确答案,或是可信答案,也暂时不想翻代码,不过有人说是这样的:gc假设所有的userdata都是需要结束的,然后开始找它指向的根对象是否有效(至于怎么个有效法暂时未知),如果无效则回收userdata的空间。

追了一下这里的调用情形:

1)我们在L中new出来一个size为指针类型的空间,它的值是dll返回来的一个地址,由指针p带回来这个地址;如此,在堆顶有一个userdata类型的element。这里不需要我们再pushinteger到lua。

2)给这个element设置metatable。

3)metatable.__gc()中是通过调用dll里操作来实现的。直接调用dll里面的方法,free(p)。如此就完成了这个gc。

 

3、int luaL_optint (lua_State *L, int narg, int d)

检查narg,如果是一个number,那么返回一个int类型的数;如果是nil,或者是没有,那么返回参数d。没想明白这个是用来干嘛的,待了解。

 

4、没有4了居然,好吧,草草的把这个wrapper看了一遍。

转载地址:http://aoiso.baihongyu.com/

你可能感兴趣的文章
免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
查看>>
Unity进阶技巧 - 动态创建UGUI
查看>>
【简单易懂的AMV图文教程-2】VEGAS基础进阶——认识关键帧
查看>>
使用css打造形形色色的形状!
查看>>
Spring切面处理
查看>>
开源大数据利器汇总
查看>>
Android SQLite详解
查看>>
Spark技术在京东智能供应链预测的应用
查看>>
SparkR-Install
查看>>
Tagger: Deep Unsupervised Perceptual Grouping
查看>>
Intellij idea 项目目录设置 与包的显示创建
查看>>
HDU 1016:Prime Ring Problem
查看>>
Impala的安装(含使用CM安装 和 手动安装)(图文详解)
查看>>
论程序猿的社会地位
查看>>
Android 布局自适应屏幕
查看>>
亿能提供的性能测试诊断分析与优化 培训课程
查看>>
《转》常用Petri网模拟软件工具简介
查看>>
unset MAILCHECK
查看>>
中文版Windows Server 2012 R2更改为英文显示语言
查看>>
教爸爸妈妈用微信
查看>>