【原】Luabind 牛刀小试

  http://x.jc.blog.163.com/blog/static/1678974200962852916402

       这二天学习使用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-11-11 10:32  Eric Xiang  阅读(4777)  评论(0编辑  收藏  举报