【原】Luabind 牛刀小试

      这二天学习使用lua,在C++中使用lua不是很方便,需要找一个lua的包装库,看了网上的介绍,据说luabind比较好,比较强大,很多商业项目中都用它,当然,要用就用最好的。 运行环境如下:
1. VS2005 SP1
2. boost 1.38 ,(现在最新的是1.39)boost 安装很简单,先在boost目录下进入tools目录,编译bjam,然后再用bjam编译boost,bjam和ant的功能类似。 具体的参考boost的intall.txt.
3. 安装lua for windows 5.14,这个很简单滴。
4. 下载luabind 0.81再编译。

接下来就是真枪实战了,可以看luabind的文档写一个hello world. 文档上用的这种方式不太好。 导出多个函数都会出问题。 下面这个例子就可以倒出各种函数,很简单的。在VS中新建一个控制台项目,类型为DLL,命名项目为hello_world,然后键入以下代码:

#include <iostream>
#include 
<luabind/luabind.hpp>
#include 
<luabind/lua_include.hpp>

#ifdef WIN32
#define LUA_EXPORT __declspec(dllexport)
#endif

extern "C"
{
#include 
"lua.h"
#include 
"lauxlib.h"
}


void greet()
{
    std::cout 
<< "hello world!\n";
    std::cout 
<< "hi, eric xiang!\n";
}


void welcome()
{
    std::cout 
<< "welcome to join us!\n";
}


void echo(const char * str)
{
    std::cout 
<< str << std::endl;
}



extern "C" int LUA_EXPORT luaopen_hello_world(lua_State* L)
{
    
using namespace luabind;

    open(L);

    module(L)
        [
            def(
"greet"&greet),
            def(
"regard"&welcome),
            def(
"echo", (void (*)(const char *))&echo)
        ];

    
return 0;
}


main.lua脚本

require "hello_world"
greet()
regard()
echo(
"this is a my first lua program")

然后把main.lua和hello_world.dll放在一起,并copy相关luabind.dll到该目录下,然后运行脚本即可。输出结果为:

>lua -e "io.stdout:setvbuf 'no'" "main.lua"
hello world!
hi, eric xiang!
welcome to join us!
this is a my first lua program
>Exit code: 0


haha 看来新上路,还比较顺利。。。
http://x.jc.blog.163.com/blog/static/1678974200962852916402
 

posted on 2009-07-28 17:31  Eric Xiang  阅读(1022)  评论(0编辑  收藏  举报