转自 http://blog.csdn.net/caoyanting007/article/details/5709820
luabind比较复杂,功能包罗万象,但使用起来比较简单,特别是最常用的方法只有几个,下面结合一个简单的例子总结一下。
在我们游戏应用中,一般都是已c++为主导的,也就是说c++主动调用lua脚本。
先写一个比较常见的lua脚本:
nGlobal = 10 --一个全局的整形变量
strGlobal = "hello i am in lua" --一个全局的字符串变量
--一个返回值为int类型的函数
function add(a, b)
return a+b
end
--一个返回值为string类型的函数
function strEcho(a)
print(a) 10
return 'haha i have print your input param'
end
cppapi.testFunc() --调用c++暴露的一个测试函数
t={name='ettan', age=23, desc='正值花季年龄'}
////////////////////////////////////lua脚本结束下面写c++函数中的调用了
#include<iostream>
#include<string>
using namespace std;
#include<lua.hpp>
#include<luabind/function.hpp>
void testFunc()
{
cout<<"helo there, i am a cpp fun"<<endl;
}
int main(int argc, char* argv[])
{
//首先声明luaState环境
using namespace luabind;
lua_State* L = lua_open(); //也可以用luaL_newState()函数
luaL_openlibs(L); //注意将lua默认库打开,要不会出现N多错误的,比如print函数都没有
//将c++中的函数暴露给lua
module(L, "cppapi")
[
def("testFunc", (void(*)(void))testFunc)
];
//加载lua脚本,我们临时起名test.lua
luaL_dofile(L, "test.lua");
try
{
//调用lua中的整形全局变量
int nLuaGlobal = luabind::object_cast<int>(luabind::globals(L)["nGlobal"]) ;
//调用lua中的字符串变量
string strLuaGlobal = luabind::object_cast<string>(luabind::globals(L)["strGlobal"]);
//获取table,方法一,通过luabind::object 固有方法
luabind::object luaTable = luabind::globals(L)["t"] ;
string name=luabind::object_cast<string>(luaTable["name"]) ;
int age = luabind::object_cast<int>(luaTable["age"]) ;
//获取table,方法二,通过gettable
string desc = luabind::object_cast<string>(luabind::gettable(luaTable,"desc"));
//下面是调用lua中函数
int nAddRes = luabind::call_function<int>(L, "add", 3, 4) ;
string strEchoRes = luabind::call_function<string>(L, "strEcho", "c++参数") ;
}
catch(...)
{
cout<<"error"<<endl;
}
return 0;
}
原文链接: https://www.cnblogs.com/tt-tt/archive/2012/11/01/2749972.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/67804
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!