既然是从零开始,那么就搞的傻瓜一点,就算是手把手教了. 哈哈.
一下内容在vs2005实现
新建一个空的win32控制台项目.
1.首先我们来配置头文件和库文件:
头文件:
D:\Lua\lua-5.1.4\src
D:\Lua\luabind-0.8.1
D:\Lua\boost_1_41_0
库文件:无.见代码.
下面就是cpp内容了:注释都是个人理解,如果您觉得不对
#include <luabind/luabind.hpp>
#pragma comment(lib,"lualib.lib") //可能你会问,lualib.lib是哪里来的? 这是我自己编译luabind得到
//的, 如果你不知道怎么编译,参考下我的另一篇文章<从零开始使用luabind>
#include <iostream>
using namespace std;
using namespace luabind;
class testlua//写一个测试类,包括一些简单的方法.
{
public:
testlua(std::string s):m_str(s){};
void myprint()
{
cout << m_str << endl;
}
void setstr(std::string s){ m_str = s;};
private:
std::string m_str;
};
int main()
{
lua_State *L = luaL_newstate();//新建一个lua_State,或者叫做创建lua状态
luabind::open(L);//为改lua状态打开所有lua库
//把写好的类绑定到lua,以下内容为读书所得,我看的是missdeer同学翻译的luabindmanual一书.
//相信好学的你,如果不明白这是怎么用的,一定会找来这书读一读的,当然我也很乐意和您分享(Q:625425901)
module(L)
[
class_<testlua>("testlua")
.def(constructor<const std::string>())
.def("myprint",&testlua::myprint)//开放这两个函数给lua使用
.def("setstr", &testlua::setstr)
];
luaL_dofile(L,"test.lua");//执行lua文件,稍后你会看到test.lua文件的内容
lua_close(L);//关闭lua状态
return 0;
}
以下是test.lua内容:
local a = testlua("hello lua!");--看不懂?如果我说它在c里是这样的: testlua obj = testlua("hello lua!"),看懂了么?恩,构建testlua类的对象.
a:myprint();//调用方法
a:setstr("yes lua!");
a:myprint();
--接下来我们在lua里尝试如下代码:
a:hisprint();
--你也许会问,这个函数不存在啊.确实不存在,但是程序并没有报错,所以或许我们需要其他的代码来处理这种错误的调用,后话了,慢慢来.
好了,执行一下C代码,你应该会看到想要的结果了.相信不少同学看到这里已经开始计划写一个类,用来随心所欲的开放你的C方法给lua使用了.先到这里.
欢迎批评指正.