colorful

zc qq:1337220912

 

luabind常用方法总结

luabind比较复杂,功能包罗万象,但使用起来比较简单,特别是最常用的方法只有几个,下面结合一个简单的例子总结一下。     在我们游戏应用中,一般都是已c++为主导的,也就是说c++主动调用lua脚本。
先写一个比较常见的lua脚本:
  1. nGlobal = 10 --一个全局的整形变量   
  2. strGlobal = "hello i am in lua" --一个全局的字符串变量   
  3. --一个返回值为int类型的函数   
  4. function add(a, b)   
  5.     return a+b   
  6. end   
  7. --一个返回值为string类型的函数   
  8. function strEcho(a)   
  9.     print(a) 10   
  10.     return 'haha i have print your input param'   
  11. end   
  12. cppapi.testFunc() --调用c++暴露的一个测试函数   
  13. t={name='ettan', age=23, desc='正值花季年龄'}  
 
////////////////////////////////////lua脚本结束
下面写c++函数中的调用了
  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. #include<lua.hpp>  
  5. #include<luabind/function.hpp>  
  6. void testFunc()  
  7. {  
  8.     cout<<"helo there, i am a cpp fun"<<endl;  
  9. }  
  10. int main(int argc, char* argv[])  
  11. {  
  12.     //首先声明luaState环境  
  13.     using namespace luabind;  
  14.     lua_State* L = lua_open();  //也可以用luaL_newState()函数  
  15.     luaL_openlibs(L);   //注意将lua默认库打开,要不会出现N多错误的,比如print函数都没有  
  16.     //将c++中的函数暴露给lua  
  17.     module(L, "cppapi")  
  18.     [  
  19.         def("testFunc", (void(*)(void))testFunc)  
  20.     ];  
  21.     //加载lua脚本,我们临时起名test.lua  
  22.     luaL_dofile(L, "test.lua");  
  23.     try  
  24.     {  
  25.         //调用lua中的整形全局变量  
  26.         int nLuaGlobal =     luabind::object_cast<int>(luabind::globals(L)["nGlobal"]) ;  
  27.         //调用lua中的字符串变量  
  28.         string strLuaGlobal = luabind::object_cast<string>(luabind::globals(L)["strGlobal"]);  
  29.         //获取table,方法一,通过luabind::object 固有方法  
  30. luabind::object luaTable = luabind::globals(L)["t"] ;  
  31. string name=luabind::object_cast<string>(luaTable["name"]) ;  
  32.         int age = luabind::object_cast<int>(luaTable["age"]) ;  
  33.         //获取table,方法二,通过gettable  
  34.         string desc = luabind::object_cast<string>(luabind::gettable(luaTable,"desc"));  
  35.         //下面是调用lua中函数  
  36.         int nAddRes = luabind::call_function<int>(L, "add", 3, 4) ;  
  37.         string strEchoRes = luabind::call_function<string>(L, "strEcho", "c++参数") ;  
  38.     }  
  39.     catch(...)  
  40.     {  
  41.         cout<<"error"<<endl;  
  42.     }  
  43.     return 0;  
  44. }  
 
    我们目前常用的方法暂时就有这些,当然在实际编码中,c++暴露给lua的经常是c++类中的函数,只要稍加修改就行!

posted on 2012-10-18 23:45 多彩人生 阅读(869) 评论(0)  编辑 收藏 引用 所属分类: lua


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜