c++利用LuaIntf调用Lua的方法示例

  

  

本文主要介绍了c++利用LuaIntf调用Lua的相关内容,分享出来供大家参考学习、下面话不多说了,来一起看看详细的介绍吧。

        空白LuaTest:: OnResponse (uint32_t uLuaRpcId,   const std:: string&sRespContent)常量   {   使用LuaIntf:: LuaRef;   LuaRef要求(m_pLuaState,“需要”);   尝试{   LuaRef处理程序=require.call (“client_rpc_response_handler”);   处理程序。dispatchStatic(“处理”,uLuaRpcId sRespContent);   }   抓住(const LuaIntf:: LuaException&e) {   std:: cerr & lt; & lt;“失败的调用lua client_rpc_response_handler.handle (),“   & lt; & lt;e.what () & lt; & lt;std:: endl;   }   }      

这是测试客户端代码,可以写Lua代码测试服务器。

  

Lua代码中发出一个Rpc请求时,会在Lua中保存一个回调,待收到应答时触发回调。通过uLuaRpcId来索引该回调。

  

sRespContent是收到的应答包,将在lua中解包。

  

OnResponse()就是调用了Lua代码:

        要求(“client_rpc_response_handler”)。处理(uLuaRpcId sRespContent)      


  

  

这里主要是在windows利用VS2015完成,首先是配置lua环境,包含lua的头文件,连接器里面链接lua的静态库,然后就是包含lua-intf的代码,具体如下表

  

 C + +利用LuaIntf调用Lua的方法示例“> <br/>
  </p>
  <p> lua-intf_d6f17a是一个包含lua-intf的目录。<br/>
  </p>
  <p> lua-intf的代码在github上可以下载:https://github.com/SteveKChiu/lua-intf <br/>
  </p>
  <p>如何使用看他的自述。md <br/>
  </p>
  <p>这里我们主要是测试绑定c++类中的函数,工程目录结构如下</p>
  <p>主要。cpp代码如下<br/>
  </p>
  
  <pre类=   # include & lt; iostream>   # include & lt; lua.hpp>   # include & lt; LuaIntf/LuaIntf.h>   # include & lt; string>      const char SCRIPTS_DIR[]=" . ./脚本”;      使用名称空间性病;      struct lua_State;      类TestLog   {   公众:   静态TestLog * getInstance ()   {   静态TestLog实例;   返回和实例;   }      ~ TestLog ();   空白日志(常量字符串,str);   空白BindLua (lua_State * l);      私人:   TestLog ();      };      TestLog: TestLog ()   {   }      TestLog:: ~ TestLog ()   {   }      空白TestLog:日志(常量字符串,str)   {   cout & lt; & lt;str & lt; & lt;endl;   }      名称空间   {   使用LuaRef=LuaIntf: LuaRef;      空白LuaLog(常量字符串,str)   {   TestLog: getInstance()→日志(str);   }      名称空间LuaTestLog   {   空白绑定(lua_State * L)   {   断言(L);   LuaIntf: LuaBinding (L) .beginModule (“c_testlog”)   .addFunction(“日志”,和LuaLog)   .endModule ();   }   };   };      空白TestLog: BindLua (lua_State * l)   {   LuaTestLog:绑定(l);   }      int main ()   {   lua_State * l=luaL_newstate ();   luaL_openlibs (l);   TestLog: getInstance ()→BindLua (l);   cout & lt; & lt;“mmmmmmmmmmm”& lt; & lt;endl;   luaL_dofile (l,“test.lua”);   系统(“暂停”);   返回0;   }      

日志。lua代码如下:
  

        本地日志={}      本地日志=c_testlog.log      日志功能:新(log_name)   断言(“表”==类型(自我))   断言(不是log_name或者“字符串”==类型(log_name))   本地日志={}   日志。log_name=log_name或“日志”   setmetatable(日志,自我)   自我。__index=自我   返回日志   结束      日志功能:set_log_name (log_name)   自我。log_name=log_name   结束      日志功能:信息(模式,…)   日志(字符串。格式(模式,…))   结束      日志功能:调试()   print (“ssssssssssssssssssssssssss”)   结束      返回日志      

测试。lua代码如下:
  

        本地函数main ()      print (“dddddddddddddddddddddddd”)   当地p=" . ./testLuaIntf "   包中。路径=包。路径…”;“. .p . .“/薄!皌estLuaIntf”. ./& # 63;.lua”   ——包。路径=包。路径. .“E: \ VSProject \ & # 63; .luac”      print (“bbbbbbbbbbbbbbbbbbbbbbbbbbbbb”)      本地日志=要求(“日志”):新(“svn_log”)   日志:信息(“% d…”, 1)         ——:新(“svc_log”)   print (“ssssssssssssssssssssssss”)         结束         xpcall(主要功能(…)   当地味精={…};   对于k、v成对(味精)   打印(k=" . .tostring (k) . .“v=" . .tostring (v))      结束   打印(tostring () . .“123”)   )

c++利用LuaIntf调用Lua的方法示例