石器时代LA官方

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6855|回复: 0

[LUA教学] Lua5.1使用快速参考

[复制链接]

1万

主题

491

回帖

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35504
石币
24669
发表于 2013-10-10 12:31:39 | 显示全部楼层 |阅读模式
1、编译Lua
下载到Lua的源代码以后,解压缩,里面会有4个文件夹外加一堆文件。其中src文件夹里面就是我们要用到的。
打开VS2003或者VS2005,新建一个空的Win32控制台应用程序,注意要是空的哦。这里假设该工程的目录在D:\lua。将刚才的src里的所有.h和.c文件拷贝到工程根目录下,也就是D:\lua下面。在VS中的“解决方案”视图中,右键点击“头文件”,添加现有项,将刚才拷贝过来的所有的.h文件添加到工程里,同样地把所有的.c文件添加到“源文件”目录中。将当前配置由debug改为release,从主菜单中进入项目->属性,找到“常规”选项卡,将右边的“配置类型”改为“静态库(.lib)”。然后生成解决方案就行了。此时我们在D:\lua\Release下面的一大堆.obj文件中会找到一个叫做lua.lib的文件,就是它了。
2、使用Lua
同样新建一个空的Win32控制台应用程序,假设工程目录是D:\test。在工程根目录下面新建一个叫做lua的目录,也就是D:\test\lua,用于存放lua的头文件和库文件。将src里的所有.h文件拷贝到刚才新建的目录里。在解决方案中新建一个“lua”文件夹,将D:\test\lua目录中所有的文件加入进去。然后在源文件里面新建一个main.cpp,作为控制台应用程序的入口文件。mail.cpp的最初代码如下:
extern "C"
{
#include "lua/lua.h"
#include "lua/lualib.h"
#include "lua/lauxlib.h"
}


int main(int argc, char** argv)
{
return 0;
}
将刚才编译得到的lua.lib拷贝到D:\test\lua目录下面。然后在项目属性里,选择配置属性->链接器->输入,在右边的附加依赖项中添加一行lua/lua.lib。
下面,我们就可以开始使用lua了。


.....

问题1:luaopen_io()函数导致程序崩溃

在user manual的Incompatibilities with the Previous Version -> Changes in the API中提到:
The luaopen_* functions (to open libraries) cannot be called directly, like a regular C function. They must be called through Lua, like a Lua function.

在lua 5.1中,api 中的 luaopen_*现在和lua调用其它普通c函数的过程一样:
lua_pushcfunction(L, luaopen_*);
lua_call();
也可以用
lua_cpcall(L, luaopen_*, 0);
简化上面两步的操作, 实际了看lua_cpcall的源码就知道,是一样的
lua 5.1推荐的开始调用lua的写法是这样的:
lua_State *L = luaL_newstate();

lua_cpcall(L, luaopen_base, 0);
lua_cpcall(L, luaopen_io, 0);
lua_cpcall(L, luaopen_string, 0);
// ...
// ...

问题2:你也不能再使用lua_dofile()或者lua_dostring()这样古老的函数了,下面是新的方式
// 从文件执行
int s = luaL_loadfile(L, "test/hello.lua");
if ( s==0 )
{
      // execute Lua program
      s = lua_pcall(L, 0, LUA_MULTRET, 0);
    }

// 从字符串执行
const char *buf = "print('hello, world!')";
s = luaL_loadstring(L, buf);
if ( s==0 )
{
      // execute Lua program
      s = lua_pcall(L, 0, LUA_MULTRET, 0);
}




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|石器时代LA官方

GMT+8, 2024-4-28 08:07 , Processed in 0.113998 second(s), 25 queries .

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表