Lua与C交互入门
简介
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) 执行
调试keil程序时有时会出现各种编译警告,一般情况下不会影响程序的运行。但出现如题WARNING:MULTIPLE CALL TO SEGMENT警告时,请留意您的程序是否会发生错误。上述警告指的是你定义的函数体在主程序中被调用,在中断中也被直接或间接的调用了。可想若主程序正运行此函数时,中断来临也运行这段程序的话会发生函数重载现象。 ......