分享
 
 
 

通过例子学习Lua(5)--Lua与C的交互

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

1.简介

Lua与C/C++结合是很紧密的, Lua与C++交互是建立在Lua与C的基础上的, 所

以偶先从Lua与C讲起.

正如第一讲所说, 运行Lua程序或者说调用Lua主要有两种方式:

* 通过命令行执行"Lua"命令

* 通过Lua的C库

虽然此前偶们一直用第一种方式, 但偶要告诉你, 通过Lua的C库执行才是游戏中

常用的方式.

2.Lua的C库

Lua的C库可以做为Shared Library调用, 但一般开发游戏时会把Lua的所有源程序

都包含在内, 并不把Lua编译成共享库的形式. 因为Lua程序只有100多K, 而且几乎

可以在任何编译器下Clean Compile. 带Lua源程序的另一个好处时, 可以随时对Lua

本身进行扩充, 增加偶们所需的功能.

Lua的C库提供一系列API:

* 管理全局变量

* 管理tables

* 调用函数

* 定义新函数, 这也可以完全由C实现

* 垃圾收集器Garbage collector, 虽然Lua可以自动进行, 但往往不是立即执行的,

所以对实时性要求比较高的程序, 会自己调用垃圾收集器

* 载入并执行Lua程序, 这也可以由Lua自身实现

* 任何Lua可以实现的功能, 都可以通过Lua的C API实现, 这对于优化程序的运行速度

有帮助. 经常调用的共用的Lua程序片断可以转成C程序, 以提高效率. 连Lua都是C写的

还有什么C不能实现呢?

3.Lua与C集成的例子

例e10.c

/* A simple Lua interpreter. */

#include

#include

int main(int argc, char *argv[]) {

char line[BUFSIZ];

lua_State *L = lua_open(0);

while (fgets(line, sizeof(line), stdin) != 0)

lua_dostring(L, line);

lua_close(L);

return 0;

}

编译

Linux/Cygwin

* 先编译Lua, 并把头文件放入include路径

* gcc e10.c -llua -llualib -o e10

VC6/VC2003

* 先编译Lua, 在Option中设置头文件和库文件路径

* 新建工程,在工程配置中加入附加库lua.lib和lualib.lib

* 编译成exe

运行结果

本程序的功能是实现一个Lua解释器, 输入的每行字符都会被解释成Lua并执行.

程序说明

* #include 包含lua头文件, 然后才可以使用API

* lua_State *L = lua_open(0) 打开一个Lua执行器

* fgets(line, sizeof(line), stdin) 从标准输入里读入一行

* lua_dostring(L, line) 执行此行

* lua_close(L) 关闭Lua执行器

例e11.c

/* Another simple Lua interpreter. */

#include

#include

#include

int main(int argc, char *argv[]) {

char line[BUFSIZ];

lua_State *L = lua_open(0);

lua_baselibopen(L);

lua_iolibopen(L);

lua_strlibopen(L);

lua_mathlibopen(L);

while (fgets(line, sizeof(line), stdin) != 0)

lua_dostring(L, line);

lua_close(L);

return 0;

}

运行结果

本程序的功能是实现一个Lua解释器, 输入的每行字符都会被解释成Lua并执行.

与上例不同的是, 本例调用了Lua的一些标准库.

程序说明

* #include 包含Lua的标准库

* 以下这几行是用来读入Lua的一些库, 这样偶们的Lua程序就可以有更多的功能.

lua_baselibopen(L);

lua_iolibopen(L);

lua_strlibopen(L);

lua_mathlibopen(L);

4.试试看

把上面两个小例子在你熟悉的编译器中编译执行, 并试试能否与Lua源码树一起编译

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有