|
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);
}
|
|